web-dev-qa-db-fra.com

Attribuer différents modèles d'article par catégorie

Est-il possible de changer le modèle d'un article unique basé sur le catégorie. La raison pour laquelle je pose cette question est parce que je veux avoir un remplacement d'un seul article en HTML à l'aide de champs et que je ne veux pas que le client ait à se souvenir de changer le modèle.

Est-il possible d’accrocher le modèle pour un article de cette manière? Et est-il possible d'écouter le changement de catégorie de cette manière? Les champs sont mis à jour en fonction de la catégorie sélectionnée. Je suppose donc que je peux accéder à la catégorie à l'aide de JS. Est-il possible de changer l'option de modèle?

4
Eoin

L’une des méthodes que j’ai trouvée consiste à utiliser une instruction if dans le remplacement d’article unique HTML. Je le préférerais dans le fichier au-dessus de la substitution HTML, mais je ne sais plus comment le faire.

if ($this->item->catid == 14):

// your stuff here
0
Eoin

Oui c'est possible. Vous pouvez le faire avec un plugin système. Cependant, une telle solution est déjà disponible chez Regular Labs. Il s'appelle Advanced Template Manager et fonctionne de manière similaire à Advanced Module Manager (si vous l'avez déjà utilisé).

Advanced Template Manager est une extension qui modifie le fonctionnement de votre gestionnaire de modèles.

Avec Joomla, vous ne pouvez normalement affecter des styles de gabarit qu'à certains éléments de menu.

Avec Advanced Template Manager, vous avez la possibilité d'attribuer des styles de gabarit à tout ce que vous voulez, ce qui vous permet de contrôler totalement vos styles de gabarit Joomla.

Non compatible avec ...

Advanced Template Manager n'est PAS compatible avec ces modèles (et peut-être d'autres) et les frameworks de modèles:

Portique (RocketTheme)
JoomlaXTC
T3 (JoomlArt)
Warp (YooTheme)


S'il arrive à utiliser l'un de ces modèles/frameworks non compatibles, il pourrait toujours être possible de développer votre plugin et de le gérer, mais des recherches seront nécessaires pour savoir comment ces frameworks gèrent leurs styles de template.

Ceci est un cadre de base de ce que vous devriez faire dans votre plugin système:

public function onAfterRoute()
{
    $mobile_template_name = 'your-other-template';
    $app = JFactory::getApplication();

    // only run in front-end
    if (!$app->isAdmin())
    {
        $selectedCategories = $this->params->get('categories');
        $input = $app->input;

        // run for articles
        if ($input->get('option') === 'com_content' && $input->get('view') === 'article')
        {
            // get article model
            JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
            $model   = JModelLegacy::getInstance('Article', 'ContentModel');
            $article = $model->getItem($input->get('id'));

            // find current article catid
            $catid = $article->catid;

            if (in_array($catid, $selectedCategories))
            {
                // article is in the selected Categories, so Set your other template
                $app->setTemplate($mobile_template_name);                       
            }
        }
    }
}
2
FFrewin