Installation des views d'un plugin

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Installation des views d'un plugin

    Bonsoir,
    j'ai créé un petit plugin qui permet d'afficher un bouton dans l'interface d'édition d'un article.
    Il affiche une boîte modale qui récupère des infos saisies par l'utilisateur et les insère dans le texte de l'article.
    Le plugin fonctionne très bien par contre je n'ai pas trouvé le moyen de mettre mes fichiers de views automatiquement à l'installation du plugin (dans administrator/components/com_content->views) et je suis contraint de les y mettre manuellement.
    J'ai essayer plusieurs méthodes à partir du XML sans résultats.
    Faut-il programmer en dur lors de l'installation et créer un fichier d'instal pour cela?
    Voici l'organisation de mes fichiers :
    Cliquez sur l'image pour l'afficher en taille normale

Nom : fichiers.jpg 
Affichages : 1 
Taille : 18,5 Ko 
ID : 1824827
    Merci de votre aide.
    Bonne soirée
    Phil

  • #2
    Re : Installation des views d'un plugin

    Salut
    un fichier install.php pourrait être utile pour gérer l'installation et la copie des fichiers
    sinon un tag "fileset" pourrait fonctionner, à tester

    <fileset>
    <files folder="" target="components/com_content/views">
    <folder>views</folder>
    </files>
    </fileset>
    CEd
    Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
    http://www.template-creator.com Outil de création de templates
    Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

    Commentaire


    • #3
      Re : Installation des views d'un plugin

      Bonsoir,

      Un plugin met ses fichiers dans le dossier /plugins/son_type/nom_plugin

      Je ne pense pas que l'on puisse mettre des fichiers dans un dossier qui ne nous appartient pas.
      UP, le plugin universel à découvrir sur https//up.lomart.fr
      bgMax
      , AdminOrder, MetaData, Zoom, ArtPlug, Custom, Memo, Filter, ... sur http://lomart.fr/extensions

      Commentaire


      • #4
        Re : Installation des views d'un plugin

        Bonsloir,
        j'ai fait plusieurs essais avec fileset mais cela ne fonctionne pas. Dommage.
        Un fichier install apparemment n'est possible que pour les composants.
        J'ai donc opté pour la déclaration d'un script dans le xml : <scriptfile>copyviews.php</scriptfile>
        J'ai donc créé un fichier copyviews.php dont voici le code (suivant le manifest https://docs.joomla.org/Manifest_files/fr) :
        <?php
        defined( '_JEXEC' ) or die( 'Restricted access' );
        jimport( 'joomla.filesystem.folder' );

        class plg_bouton_galleryInstallerScript
        {
        /**
        * Constructor
        *
        * @param JAdapterInstance $adapter The object responsible for running this script
        */
        public function __construct(JAdapterInstance $adapter);

        /**
        * Called before any type of action
        *
        * @param string $route Which action is happening (install|uninstall|discover_install|update)
        * @param JAdapterInstance $adapter The object responsible for running this script
        *
        * @return boolean True on success
        */
        public function preflight($route, JAdapterInstance $adapter);

        /**
        * Called after any type of action
        *
        * @param string $route Which action is happening (install|uninstall|discover_install|update)
        * @param JAdapterInstance $adapter The object responsible for running this script
        *
        * @return boolean True on success
        */
        public function postflight($route, JAdapterInstance $adapter);
        {
        $src = JPATH_ROOT . '/plugins/editors_xtd/gallery/views/monpluginviews';
        $dest = JPATH_ROOT . '/administrator/components/com_content/views/monplgviews';

        $message = '';
        $error = array();

        if (!JFolder::exists( $src))
        {
        $message .= '<div><b><span style="color:#CC0033">Dossier</span> ' . $src
        .' <span style="color:#CC0033">Copie des views impossible.</span></b> Copiez par ftp le contenu du dossier views manuellement dans "administrator/components/com_content/views".</div>';
        $error[] = 1;
        }
        else
        {
        move($src, $dest, $path = '', $use_streams = false);
        }

        }


        /**
        * Called on installation
        *
        * @param JAdapterInstance $adapter The object responsible for running this script
        *
        * @return boolean True on success
        */
        public function install(JAdapterInstance $adapter);
        /**
        * Called on update
        *
        * @param JAdapterInstance $adapter The object responsible for running this script
        *
        * @return boolean True on success
        */
        public function update(JAdapterInstance $adapter);

        /**
        * Called on uninstallation
        *
        * @param JAdapterInstance $adapter The object responsible for running this script
        */
        public function uninstall(JAdapterInstance $adapter);
        }
        ?>
        J'ai le protocole ftp activé sur le site.
        J'ai une erreur et je n'arrive pas à savoir ce qui la provoque : Internal server error.
        Peut-être est-ce lié à cette prescription qui ce trouve dans le manifest quee je ne comprends pas (quel groupe?): "Pour les plugins, il convient de nommer également le groupe (par exemple : plgsystemnomduplugin)."

        Commentaire


        • #5
          Re : Installation des views d'un plugin

          Bonjour,
          j'ai trouvé en partie la solution.
          Dans un premier temps je suis allé trop vite et mon fichier copyviews.php du post précédant avait quelques erreurs qui traînées.
          Maintenant le plugin s'installe correctement, copie les fichiers dans com_content et s'active en base de donnée.

          Par contre impossible d'utiliser la class car ne n'arrive pas à trouver le bon nom de classe. Dans le manifeste il est dit qu'il faut rajouter le groupe (c-a-d le type de plugin, en fait cela correspond au champ "folder" dans la base, dans mon cas editors-xtd) se qui ferait pour moi un nom tel que "plgeditorsxtdmonbouton".

          J'ai contourné le pb en créant une fonction mais je perds tous les avantages du postinstall et ne peux pas faire aussi une désinstallation et autres.

          Qui a une idée?

          Voici le code de copyviews.php :
          //class editorsxtdmonboutonInstallerScript
          //{
          /*public*/ function postflight($var)
          {
          $database = JFactory::getDBO();

          $src = __DIR__.'/monplgview/';
          $src2 = __DIR__.'/monplgview/tmpl/';
          $dest = JPATH_ADMINISTRATOR.'/components/com_content/views/monplgview/';
          $dest2 = JPATH_ADMINISTRATOR.'/components/com_content/views/monplgview/tmpl/';
          if(!file_exists($dest)){
          mkdir($dest);
          if(!file_exists($dest2)){
          mkdir($dest2);
          }
          }
          $success = 0;
          $success = copy($src.'view.html.php', $dest.'view.html.php');
          copy($src.'index.html', $dest.'index.html');
          if($success){
          $success = copy($src2.'default.php', $dest2.'default.php');
          copy($src2.'index.html', $dest2.'index.html');
          }
          if($success){
          $database->setQuery("SELECT extension_id, enabled FROM #__extensions WHERE type='plugin' AND element='monbouton' AND folder='editors-xtd' LIMIT 1 ");
          $rows = $database->loadObjectList();
          $plugin_id = 0;
          $plugin_enabled = 0;
          foreach($rows as $row){
          $plugin_id = $row->extension_id;
          $plugin_enabled = $row->enabled;
          }
          if($plugin_id){
          $database->setQuery( "UPDATE #__extensions SET enabled='1', access='1', ordering='-29000' WHERE extension_id='$plugin_id' ");
          $database->query();
          }else{
          $manifeste = '{"legacy":false,"name":"monbouton","type":"plugin ","creationDate":...}';
          $manifeste = addslashes($manifeste);
          $database->setQuery( "INSERT INTO #__extensions SET name='monbouton', type='plugin', element='monbouton', folder='editors-xtd', enabled='1', access='1', manifest_cache='$manifeste', ordering='-29000' ");
          $database->query();
          }
          }
          }
          //}
          postflight($var);

          Commentaire


          • #6
            Re : Installation des views d'un plugin

            j ene l'ai jamais fait avec un plugin, et encore moins un "editors-xtd", sachant qeu ce type de plugin est aussi appelé "button"
            fait des tests avec un plugin system, comme ça déjà tu es sur du nom. Une fois que ça marche tu peux voir si c'est plugbutton, ou plugEditors-xtd ou autre
            Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
            http://www.template-creator.com Outil de création de templates
            Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

            Commentaire


            • #7
              Re : Installation des views d'un plugin

              Bonsoir,
              merci pour tes orientations mais je suis dans une impasse. J'ai fait tous les essais possibles...
              Il y a cette méthode getScriptClassName dans libraries->cms->installer->adapter->plugin.php
              protected function getScriptClassName()
              {
              return 'Plg' . str_replace('-', '', $this->group) . $this->element . 'InstallerScript';
              }
              Mon nom de class correspond bien au schéma.
              J'ai essayé d'enregistrer (register) la class et de l'instancier mais sans succès.
              Il est fait nulle part appel à cette class lors de l'install ou je n'ai pas réussi aussi à trouver.

              Commentaire


              • #8
                Re : Installation des views d'un plugin

                J'ai trouvé le problème :
                Le nom de la class doit être construit non pas avec le "name" du plugin mais avec le nom du répertoire dans lequel il est.

                Dans mon cas le nom du répertoire était légèrement différent du name. Je pense que le plus simple est de donner au répertoire le même nom que "name".

                Cela fait :
                PlgEditorsXtdMonboutonInstallerScript

                Plg : pour plugin
                EditorsXtd : pour le type de plugin
                Monbouton : le nom de mon dossier contenant le plugin
                InstallerScript : le script d'installation

                J'ai mis des capitales pour délimiter les différents éléments constitutifs (un peu comme Zend). Je n'ai pas fait de tests avec le nom de class tout en bas de casse. Je n'ai pas recherché la méthode qui analyse le nom de la class mais il semble que cela ressemble en partie à un chemin.

                Si ça peut servir à quelqu'un...

                Commentaire

                Annonce

                Réduire
                Aucune annonce pour le moment.

                Partenaire de l'association

                Réduire

                Hébergeur Web PlanetHoster
                Travaille ...
                X