Joomla 3.x custom component view is shown in wrong template design - templates

I am developing a custom component. In this component I need Joomla's Redirect with its inbuilt function JRoute for example:
JRoute::_('index.php?option=com_customcomponent&view=registration');
I have a menu item, which is linked to the URL above and has an alias with the name registration. Furthermore I set a special template for this view. If I call the link http://www.mywebsite.com/registration => the view will be opened with the right design (special template).
If I access it on a direct way http://www.mywebsite.com/index.php?option=com_customcomponent&view=registration or inside my component with JRoute, the view will be shown with the wrong template (it will be show with the Standard Template and not the special template).
What could be wrong here?

It is necessary to put the Menu Item in the link.
JRoute::_('index.php?option=com_customcomponent&view=registration&Itemid=xx')

Related

Joomla 3.3.1 category blog not showing on specific template

I'm working on Joomla 3.3.1 (on Mac, MAMP). When I choose to display a menu item as "category blog" it leads to a blank page. If I select a different template style (on the menu item details) the page does show correctly.
How can I use my default template to show the page correctly? Where can the problem be?
I'm using the template "ict_conches_free" as my default template.
Will just add this as a proper answer:
Try checking for the following directory templates/YOU_TEMPLATE/html/com_content/category. If it exists then it mean a Template Override has been made for that specific view which allows users to override the view of an extension without having to modify core files.
In your case, if it exists, then the override is faulty in some way, shape or form. So simply delete the category folder.

Different rendering techniques in emberjs handlebars template

I've been reading a lot on emberjs lately but something isn't really clear to me: I have a feeling that there are different ways of rendering a template. Can someone explain the differences between these:
{{render}}
{{partial}}
{{template}}
{{outlet}}
I'm using pre4, so if some of these keywords are obsolete, please notify.
You can search the Ember.JS source for all of these by searching for: Ember.Handlebars.registerHelper('?'. For example, to find the part where template is defined, search for: Ember.Handlebars.registerHelper('template'
{{template}}
Is similar to the {{partial}}, but looks for templates that you define in the Ember.TEMPLATES hash. From the source code we can see an example: Ember.TEMPLATES["my_cool_template"] = Ember.Handlebars.compile('<b>{{user}}</b>'); and then we can render it that way.
I heard a whisper that {{template}} is #deprecated, but I can't find where I found that information at the moment. However, it's worth mentioning that I've never found myself using this one. Instead I prefer {{partial}}.
Edit: It appears as though it isn't #deprecated as of
3df5ddfd4f. My mistake!
{{partial}}
This is different to the {{render}} approach in that the controller and view are inherited from the context that called it. For example, if you're in the UserRoute, and you load in a partial in your user template, then the UserView and UserController will both be passed to your partial, so they can access exactly the same information as its current parent.
Partial names, when defined, start with an underscore. For instance, a Profile partial will have the data-template-name of: data-template-name="_profile" but is inserted into your view as {{partial "profile"}}.
{{outlet}}
You'll probably find yourself using this one a lot. It's predominantly used in cases where the outlet changes frequently, based on user interactions. By transitioning to (this.transitionTo/{{#linkTo}}) another page, Ember inserts the view into the {{outlet}} and attaches the relevant controller and view.
As an example, if you're transitioning into /#/pets then, by default, Ember will load the PetsView into the {{outlet}}, and attach the PetsController, all of this after initialising the PetsRoute to take instructions before initialising the view and finding the controller.
{{render}}
This is a mixture of an {{outlet}} and a {{partial}}. It's used for static pages that don't switch out for other pages (as an outlet does), but it doesn't inherit the controller and view (as a partial does).
It's better with an example. Let's say you've got a navigation. Usually you'll only have one navigation, and it won't change for another one, but you want the navigation to have its own controller and view, and not to be inherited from the context (probably ApplicationRoute). Therefore when you insert the navigation ({{render "navigation"}}), Ember will attach App.NavigationController and App.NavigationView.
Summary
template: Consults a global hash and inserts the view when it finds it (possibly soon to be #deprecated);
partial: Used to split up complicated views, and inherits the controller/view from the parent (if you're in the UserController, then the partial will also have access to this, and its associated view).
outlet: Most widely used, and allows you to quickly switch out pages for other pages. Relevant controller/view attached.
render: Similar to an outlet, but is used for pages that are persistent across the entire application. Assumes the relevant controller/view, and doesn't inherit them.
Did I explain them well?
Just to clarify:
Partial: Inherited controller, inherited view, non-switchable;
Outlet: Relevant controller, relevant view, switchable;
Render: Relevant controller, relevant view, non-switchable;
The guide also provides some useful information here! Below is a quick summary:
I wanted to post another answer here that really helped me to clarify when to use the various template techniques -
Route
Using a route is when you need a full-blown route. A 'route' has a unique URL and consists of generated or user defined classes of the following type -
Route (Ember.Route)
Controller (Ember.Controller || Ember.ArrayController || Ember.ObjectController)
View (Ember.View)
Template (Handlebars template)
{{render}}
Use the {{render}} helper when you need a view but still need to provide some functionality with a controller. {{render}} does not have a unique URL and consists of the following -
Controller (Ember.Controller || Ember.ArrayController || Ember.ObjectController)
View (Ember.View)
Template (Handlebars template)
{{component}}
Use the {{component}} helper when you are building a commonly re-used template which exists independent of the context it is rendered within. An decent example may be if you were building a retail website and wanted to have a product view agnostic of where it is rendered. {{component}} does not have a unique URL nor a controller but instead has a component class and consists of the following -
Component (Ember.Component)
Template (Handlebars template)
{{partial}}
Use the {{partial}} helper when you are simply re-using some mark-up. {{partial}} does not have a unique URL nor any special backing like a component and consists of the following -
Template (Handlebars template)

Emberjs: what's the context the classBinding on {{#view}} helper use?

The doc's example implies that the context is the instance of a View without a controller. But I can't try this out with latest version, please check this jsfiddle's link.
Here is the way I would do this: http://jsfiddle.net/arasbm/ACqjt/1/
Just to clarify context of the view is set to it's controller by default. If you want to access a property of view such as flag inside the view template you would use view.flag to refer to it.
I prefer to setup view class name bindings inside the view itself:
classNameBindings: ['flag:A:B']
You should also be able to do the binding in the template, but I am not sure why that is not working in your fiddle. Do not use quotations when you are defining your view, instead use:
{{view App.CustomDiv}}
or
{{#view App.CustomDiv}}{{/view}}
if you dont want to use a seperate template for your view. I like to setup a template for each view I have. I put them in separate files for example custom.handlebars, but for demonstration in jsFiddle you can use the data-template-name property to name the template you want to use, and then refer to it inside the view definition using templateName. I hope this helps you move forward.

Sidebar with django, layout or view?

I want to make a sidebar for my webapplication. It contains the following content:
A search bar
a list of tags
links to recent posts (with year and month)
I want to include this sidebar in every site/view. So my first guess is that it would belong to a layout.
But it's also dynamic and as far as i know layouts are static.
How do I avoid redundancy in my views/layouts and still have the sidebar on every site?
To have context data passed to multiple templates you have different options in django; You could either:
Make a Template Tag which can pull in the relevant data and render it and reuse it in every template you need to (or just insert it in a base template and use template inheritance).
Use a context processor: It will be called with every request and add data to every view's context that uses RequestContext.
Using Django's class based views you could have all your views inherit from a base view which adds data to your context.
If you need data from your database I would rather go with using a template tag than using a context processor as it will be called for every view.
For static content in your sidebar (e.g. search form), its straight forward template/html.
For the dynamic content like list of tags, recent posts:
Once in the template you have identified a elements (div or something else) to put this info, you can populate its content using either your custom template tag or having custom context processor.
In your case, if the content doesn't really depend upon request parameter or url, template tag would be better choice.
Reference Custom template tag Custom Context Processor

Joomla Template Overrides

In joomla, I need to assign specially designed templates for both "User Edit" (Where user edits their details)
/index.php?option=com_user&view=user&task=edit
and "Search Results"
I can't for the life of me work out how Joomla is selecting templates now. Certainly ItemID's aren't obvious and template overrides aren't giving any clues.
Currently Search is defaulting to the site 'home page' template, and the user edit to the 'default' template.
I don't think it should matter but we are using jfusion.
Can anyone point me in the write direction
Thanks
Stephen
Templates in Joomla are assigned to different pages (via menu items) under Extensions > Template manager. The default template (with a star) is assigned to all otherwise unassigned pages. For the other templates, click the name and choose the pagesto assign it to.
If you don't have menu items assigned to the pages you mentioned, you can create a new menu called "hidden menu", make the menu items there, then link to those menus.
I think you're getting terminology mixed up though. "Template overrides" are files that reside in each template that override the default content output. There's only one set per template - if you want multiple template overrides you need multiple templates.
template over rides are stored in the templates folder.
so if you are using teh template called "beez" (comes stock standard)
the template overides are in :
templates/beez/html/
they are then stored under the module or component name. eg the article layout for com_content is stored in:
templates/beez/html/com_content/article/default.php
the template is usualy called default.php, but each component and module can have a few extra templates that they use as well as deafult.php
Now you are asking to change the "user" view for com_user when editing
I think that location is:
templates/beez/html/com_user/user/form.php
if you ever want to find the origanal template which is to be overridden in this case: template that would be in:
/components/com_user/views/user/tmpl/form.php
so in general
templates/templatename/component_name/view_name/template_filename.php
Lets try ::
/index.php?option=com_user&view=user&task=edit&template=template-name
parameter template comes from /includes/application.php:311
// Allows for overriding the active
template from the request
$template = JRequest::getCmd('template',
$template);
Hope it will work :-)