Joomla: Comment changer de modèle sur un article spécifique
Est-il un moyen de changer le modèle sur un article spécifique?
Notez que cela devrait fonctionner sans établir de lien de l'article pour n'importe quel menu.
Si vous voulez que le modèle remplacent pas dépendre de la position du menu de la norme joomla méthode de l'affectation d'un modèle différent d'un menu ne fonctionne pas. Vous aurez besoin d'obtenir vos mains sales et écrire du code personnalisé. Vous aurez besoin d'utiliser la article_id comme déclencheur d'un modèle de commutateur.
J'ai fait quelque chose comme ça au travail, mais ne me souviens plus exactement comment cela est réalisé. Je vais poster mon code ici dès que j'ai le localiser.
MODIFIER: Trouvé le code 🙂
Vous devez éditer le fichier /includes/application.php, plus précisément le getTemplate() la méthode. À la fin de cette méthode, juste avant:
//Fallback template
if (!file_exists(JPATH_THEMES.DS.$template.DS.'index.php')) {
$template = 'rhuk_milkyway';
}
vous pouvez ajouter votre condition pour l'application d'un modèle personnalisé, comme suit:
//CUSTOM TEMPLATE FOR THE ARTICLE 13
if (JRequest::getVar('id')=='13' && JRequest::getVar('option')=='com_content') {
$template = $custom_template_name;
}
Cela permettra d'appliquer le modèle personnalisé dont le nom est à l'intérieur de l' $custom_template_name de l'article avec l'id=13. Vous pouvez également l'utiliser pour appliquer un modèle différent pour les composants, comme je l'ai fait avec simplecaddy:
//TEMPLATE FOR SIMPLECADDY
if (JRequest::getVar('option')=='com_caddy'){
$template = 'shop';
}
Vous devriez vraiment essayer de rester loin de codage en dur quoi que ce soit dans le modèle, s'il peut être évité. Je ne sais pas pourquoi vous préciser que l'article ne serait pas lié à partir d'un menu. La meilleure façon d'atteindre cet objectif sans avoir à écrire de code et de créer un nouveau menu, puis sur ajouter un élément de menu qui renvoie à l'article que vous souhaitez spécifier le modèle. Vous n'avez pas à placer le menu dans un module de n'importe où, alors il ne sera jamais affiché sur le site, mais il apparaîtra dans le menu affectation dans le gestionnaire de modèles.
Vous pouvez le faire avec des articles, des catégories, des articles, ou même des composants. Tant que vous avez un lien de menu pour associer le modèle. Je crée toujours un Admin menu uniquement pour mettre des liens qui sont nécessaires pour exécuter le site, mais ne doivent pas être accessibles par les utilisateurs.
Comme Brent dit, éviter la tentation de modifier le core de Joomla code! Cela va probablement vous empêcher de faire Joomla mises à niveau 'cos vous savez qu'il va se casser les principaux changements que vous avez fait.
En dehors de la "caché élément de menu" technique " (ce qui est utile, mais peut briser SEF URLs dans certains cas), un outil utile est Caméléon. Cela vous permet de sélectionner des articles/catégories/sections (ainsi que des choses comme le type de navigateur, l'utilisateur groupe, composant, peu importe) et les utiliser pour déclencher un certain modèle.
Si c'est un vieux post, j'ai pensé que je vous ferais partager mes pensées: Vous pouvez facilement changer de modèle sur un seul article, par la mise en œuvre de la onAfterInitialize() - fonction dans un système de plugin. Pas besoin de modifier le Joomla de base.
Cela fonctionne pour Joomla 1.5, mais devrait aussi travailler en 2.5:
function onAfterInitialise(){
if(true){ //f.ex. test for article ID or whatever
JRequest::setVar('template', 'beez'); //change template
}
}
Dans joomla 3.versions x, url-les paramètres sont gérés différemment. Ce qui suit a été testé dans joomla 3.4.8:
public function onAfterInitialise()
{
$app=JFactory::getApplication();
if(true){ //f.ex. test for article ID or whatever
$app->input->set('template', 'beez3');
}
}
J'ai créer un plugin avec votre code, mais lorsque j'essaie de vérifier le composant en cours comme ce $app->input->get('option') == "com_content" rien ne se passe, pourriez-vous m'aider? Essayez de vérifier si la fonction de plug-in est exécuté, f.ex. avec print_r($app->input); die(); Ici, vous allez aussi voir ce que les paramètres sont définis dans le $app->input objet...
Si vous voulez que le modèle remplacent pas dépendre de la position du menu de la norme joomla méthode de l'affectation d'un modèle différent d'un menu ne fonctionne pas. Vous aurez besoin d'obtenir vos mains sales et écrire du code personnalisé. Vous aurez besoin d'utiliser la article_id comme déclencheur d'un modèle de commutateur.
J'ai fait quelque chose comme ça au travail, mais ne me souviens plus exactement comment cela est réalisé. Je vais poster mon code ici dès que j'ai le localiser.
MODIFIER: Trouvé le code 🙂
Vous devez éditer le fichier /includes/application.php, plus précisément le getTemplate() la méthode. À la fin de cette méthode, juste avant:
vous pouvez ajouter votre condition pour l'application d'un modèle personnalisé, comme suit:
Cela permettra d'appliquer le modèle personnalisé dont le nom est à l'intérieur de l' $custom_template_name de l'article avec l'id=13. Vous pouvez également l'utiliser pour appliquer un modèle différent pour les composants, comme je l'ai fait avec simplecaddy:
OriginalL'auteur silvo
Vous devriez vraiment essayer de rester loin de codage en dur quoi que ce soit dans le modèle, s'il peut être évité. Je ne sais pas pourquoi vous préciser que l'article ne serait pas lié à partir d'un menu. La meilleure façon d'atteindre cet objectif sans avoir à écrire de code et de créer un nouveau menu, puis sur ajouter un élément de menu qui renvoie à l'article que vous souhaitez spécifier le modèle. Vous n'avez pas à placer le menu dans un module de n'importe où, alors il ne sera jamais affiché sur le site, mais il apparaîtra dans le menu affectation dans le gestionnaire de modèles.
Vous pouvez le faire avec des articles, des catégories, des articles, ou même des composants. Tant que vous avez un lien de menu pour associer le modèle. Je crée toujours un Admin menu uniquement pour mettre des liens qui sont nécessaires pour exécuter le site, mais ne doivent pas être accessibles par les utilisateurs.
OriginalL'auteur Brent Friar
Comme Brent dit, éviter la tentation de modifier le core de Joomla code! Cela va probablement vous empêcher de faire Joomla mises à niveau 'cos vous savez qu'il va se casser les principaux changements que vous avez fait.
En dehors de la "caché élément de menu" technique " (ce qui est utile, mais peut briser SEF URLs dans certains cas), un outil utile est Caméléon. Cela vous permet de sélectionner des articles/catégories/sections (ainsi que des choses comme le type de navigateur, l'utilisateur groupe, composant, peu importe) et les utiliser pour déclencher un certain modèle.
OriginalL'auteur buzzki
Si c'est un vieux post, j'ai pensé que je vous ferais partager mes pensées: Vous pouvez facilement changer de modèle sur un seul article, par la mise en œuvre de la onAfterInitialize() - fonction dans un système de plugin. Pas besoin de modifier le Joomla de base.
Cela fonctionne pour Joomla 1.5, mais devrait aussi travailler en 2.5:
Dans joomla 3.versions x, url-les paramètres sont gérés différemment. Ce qui suit a été testé dans joomla 3.4.8:
Plus sur l'écriture de plugins pour Joomla ici
$app->input->get('option') == "com_content"
rien ne se passe, pourriez-vous m'aider?Essayez de vérifier si la fonction de plug-in est exécuté, f.ex. avec print_r($app->input); die(); Ici, vous allez aussi voir ce que les paramètres sont définis dans le $app->input objet...
OriginalL'auteur jonasfh