web-dev-qa-db-fra.com

Quelle est la bonne méthode pour obtenir l'alias de la page active

Je veux charger du JS mais uniquement sur la page où cela est nécessaire.

J'essaie d'utiliser l'alias de l'article actif pour déterminer cela.

Mon code dans le fichier Component.php est:

   $path = &JFactory::getURI()->getPath();
   $length = strlen($path);

   for ($i = $length; $i >= 0 ; $i--)
         if ($path[$i] == '/')
            return substr($path, $i + 1, $length - $i - 1);

   $alias = $path;

et cette partie dans la <tête>:

if ($alias == "elearning")) { ?>
    <script src="/media/system/js/ddslick.js" type="text/javascript"></script>
<?php } ?>

Ça ne semble pas fonctionner.
Des suggestions où je vais mal?

6
BodgeIT

Une possibilité consiste à modifier légèrement la disposition pour autoriser davantage de contrôles de modèle. Ce n'est pas directement lié à l'obtention du pseudonyme de l'article, mais à une autre approche.

Pour ce faire, ajoutez ce champ dans le fichier templateDetails.xml

<field name="htmllayout" type="list" default="center"
    label="HTML Layout"
    description="Dynamic layout style from index.php"
    filter="Word"
>
    <option value="main">main</option>
    <option value="raw">Raw</option>
</field>

Vous pouvez ajouter autant d’options que vous le souhaitez, j’en ai 2 à titre d’exemple. Cela créera un paramètre dans le gestionnaire de modèles. L'ouverture du modèle dans le gestionnaire de modèles devrait également vous permettre de modifier ce paramètre. La clé consiste à laisser le modèle actuel en mode principal, puis à le dupliquer (il ne fait que dupliquer les paramètres, pas les fichiers). Dans ce deuxième modèle, vous pouvez modifier la présentation HTML et utiliser l'onglet "Affectation de menu" pour spécifier quelle page peut l'utiliser. Ainsi, dans le cas d'un alias d'un article, tant que l'article est associé à un élément de menu (probablement avec le même alias), il devrait être assez facile d'affecter ce modèle à l'alias spécifié (et à tous les autres).

Donc, fondamentalement, vous aurez un modèle spécifié pour une utilisation uniquement avec des pages spécifiques.

Cela nécessite également quelques modifications du index.php Également.

ajoutez ce qui suit en haut du fichier, dans le premier bloc php:

$htmllayout = $this->params->get('htmllayout');

Ensuite, partout où vous devez spécifier quelque chose de différent pour une mise en page spéciale, procédez comme suit:

<?php if($htmllayout=='LAYOUTNAME'): ?>
anything you need here
<?php endif; ?>
1
Jordan Ramstad

Si vous parlez de l'alias d'article, appelez le modèle de contenu ou lisez-le à partir de la base de données.

Si vous parlez de l'alias dans l'URL, il n'est pas facile de l'obtenir: Joomla a tellement de façons de le générer: ce sera différent si vous arrivez à l'article:

  • via un blog ou une liste de catégories, il sera basé sur l'alias de l'article;
  • via un élément de menu direct, il sera basé sur l'alias d'élément de menu;
  • à travers une recherche, Joomla décide;
  • vous avez une extension SEF? vous faites vos propres règles

Et ceci ne concerne que la dernière section du pseudonyme; la première partie (ou "chemin") dépend de la navigation qui vous a conduit à l'article.

Pour vous donner une idée de la complexité de cette opération, une extension SEF grand public appelle le client afin d'obtenir le pseudonyme, car ils ont de toute évidence découvert qu'il n'était pas fiable de générer un pseudonyme dans le backend.

En bout de ligne: oubliez l'alias.

Manières autour de ceci: $ input = JFactory :: getApplication () -> input;

  • Utilisez l'id de l'élément de menu: $ input-> get ('Itemid');
  • Utilisez le nom du composant/vue: $ input-> get ('option'). '.' . $ input-> get ('view') ;;
  • Utilisez l'id de l'article: $ input-> get ('id'); (mais vérifiez si option = com_content & view = article)

J'espère que ça répond à ta question.

1
Riccardo Zorn

Si vous souhaitez charger un JS uniquement sur certaines pages, essayez d’utiliser Jumi. Ce wokerd pour moi. http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-content/102

0
Eva Farkasne