web-dev-qa-db-fra.com

Chargement automatique de classes personnalisées dans un composant

J'écris mon premier composant Joomla. J'ai trouvé qu'il y a 3 soi-disant points d'entrée.

  1. installer
  2. entrée du site
  3. entrée d'administrateur

J'aimerais utiliser des classes d'utilitaires communes pour tous ces points d'entrée. Ces classes doivent faire partie de ce composant uniquement et doivent être installées dans le package que je crée à partir de ce composant.

Quelle est la meilleure pratique pour copier, enregistrer et charger ces classes? J'ai trouvé qu'il existe un JLoader, que vous pouvez utiliser pour enregistrer et charger des classes, mais rien de plus. Il n’est pas clair comment copier ces classes, car leur dossier est au même niveau que les dossiers site et admin qui sont copiés par l’installation.

On ne sait pas non plus comment enregistrer ces classes sans ajouter de code aux points d'entrée. Ofc. si ce n'est pas possible, je peux vivre avec cela. Je ne veux pas utiliser PHP espaces de noms, car Joomla ne les utilise pas et je veux rester joomlish.: D

1
inf3rno

Puisque je ne veux pas développer deux applications, comme le recommande Joomla, et que je ne veux pas utiliser MVC, j'ai décidé de tout mettre dans un seul dossier sous le même espace de noms.

Le fichier manifeste ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.4" method="upgrade">

    <name>example</name>
    <!-- ... -->

    <scriptfile>installer.php</scriptfile>

    <files>
        <filename>example.php</filename>
        <folder>views</folder>
        <folder>Example</folder>
        <folder>language</folder>
    </files>
    <!-- ... -->

    <administration>
        <menu>COM_EXAMPLE_TITLE</menu>
        <files>
            <filename>example.php</filename>
            <folder>Example</folder>
            <folder>language</folder>
        </files>
        <!-- ... -->
    </administration>

</extension>

Mes déclarations de classe se trouvent dans le dossier Example et les classes sont définies dans l'espace de noms Example.

J'utilise le code suivant dans le commun example.php point d'accès.

JLoader::registerNamespace('Example', JPATH_COMPONENT);

use Example\Component;

Component::getInstance()->run();
0
inf3rno

Si les classes utilitaires ne sont utilisées que dans votre composant, incluez-les dans un dossier de votre composant administrateur. Que vous enregistriez les classes avec JLoader ou que vous leur demandiez simplement de les configurer, définissez le chemin comme suit: JPATH_ADMINISTRATOR . '/your_component_name/utilities/a_class.php'. Si vous avez plusieurs classes d'utilitaires, placez tous les appels aux classes dans un fichier, puis require_once ce fichier parmi les 3 fichiers d'entrée.

Généraliser la manière Joomla est

  1. inclure tout votre code dans votre composant/module/plugin/template - le code personnalisé ne va nulle part ailleurs.
  2. pour éviter la duplication de code, utilisez les classes que vous utilisez à l’avant et à l’arrière.
3
jamesgarrett