web-dev-qa-db-fra.com

Exécution du script d'installation lors de l'installation du module: Comment définir un module chrome par programmation?)

J'ai créé un module personnalisé et je veux changer le module chrome en "aucun". Ceci peut être réalisé dans le back-end, mais j'aimerais que ce soit le comportement par défaut si d'autres utilisateurs l'utilisent. Je veux qu’il soit aussi simple que possible de fonctionner immédiatement.

Y a-t-il un moyen de faire cela automatiquement? Le fichier XML n'inclut pas cette option, je ne peux donc pas le faire ici.

1
Eoin

Réponse mise à jour:

Après vos explications, je vois ce que vous cherchez.
En effet, vous pouvez le faire lors de l’installation de votre module. Étant donné que le module est destiné au back-end et que vous n’en aurez besoin que d’une instance, définir le module chrome lors de l’installation a du sens.).

Dans votre module install.php vous pouvez mettre à jour le module créé lors de l’installation avec la fonction postflight:

function postflight($type, $parent)
{
    // check if it's the first time the module is installed.
    if($type == 'install') 
    {
        $db = JFactory::getDBO();
        $module_name = 'your_module_name';

        // get module id that is created during installation 
        $query = 'SELECT `id`' .
            ' FROM `#__modules`' .
            ' WHERE module = ' . $db->quote($module_name);
        $db->setQuery($query);

        try
        {
            $moduleid = $db->loadResult();
        }
        catch (Exception $e)
        {
            $moduleid = '';
        }

        // Do we have a module?
        if (!empty($moduleid) )
        {
            // Get Modules' JTable
            $module = JTable::getInstance('module');

            // Load the module instance by id
            $module->load($moduleid);
            $params = array(
                'style' => 'System-none',
                'cache' => 0
            );

            // Set Module's properties
            $module->set('title', (string) 'This is my title');
            $module->set('position', (string) 'New Position');
            $module->set('params', json_encode($params));

            // Store in the database
            $module->store();
        }
    }
}

Vous trouverez ici plus d’informations sur l’inclusion d’un script d’installation dans votre module:
Création d'un module simple/Ajout du script d'installation-unintall-update.

Réponse initiale:

Comme je l'ai dit dans mon commentaire ci-dessus, il est difficile de savoir ce que vous demandez ou quel est votre problème. Je vais donc deviner que vous avez développé un module pour lequel vous préféreriez ne rien afficher autour de celui-ci lorsqu’il est installé et configuré pour apparaître sur une position de module. Vous recherchez donc un morceau de code dans votre module, cela ferait en quelque sorte cela? (Est-ce ce dont vous parlez ???).

Module Chrome cependant, ce n'est pas quelque chose qui est contrôlé au niveau du module, mais plutôt une fonctionnalité de modèle. Il définit un balisage "layout"/html de la position d'un module sur un modèle, cela se produit en dehors du module et ce n'est pas quelque chose qu'une instance de module n'en sait rien. Module Chrome n'est pas quelque chose qu'un développeur de module devrait penser.

Par programmation , il peut être défini sur un choix par défaut pour chaque position de module, mais ceci est effectué par le modèle lorsque les positions de module y sont définies.

Voici comment cela se fait:

<jdoc:include type="modules" name="position-1" style="none" />
<jdoc:include type="modules" name="position-2" style="xhtml" />

Ce que l’utilisateur final peut bien entendu ignorer lors de la création et de l’affectation d’un module à n’importe quel emplacement.

1
FFrewin