web-dev-qa-db-fra.com

Comment définir le titre de la page à partir d'un composant

J'ai construit un composant 3.x à l'aide de Component-Creator.com et je souhaite pouvoir définir le titre de la page sur l'en-tête de l'élément (tiré du composant lui-même). J'ai essayé le code suivant mais ça ne marche pas:

$browserbar= "$this->item->heading";
$document = JFactory::getDocument();
$document->setTitle($browserbar);

Cette sortie vient de:

JObject->heading

comme titre de page dans le navigateur

6
RustyJoomla

Ok, je l'ai résolu. J'ai enlevé les "" marques autour de $ this-> item-> comme suit:

$browserbar= $this->item->heading;
$document = JFactory::getDocument();
$document->setTitle($browserbar);

et maintenant ça marche!

9
RustyJoomla

Une alternative à la suppression des guillemets consiste à envelopper la variable entière entre accolades:

$browserbar= "{$this->item->heading}";

Cela provoque PHP) pour traiter la pièce entière comme une seule variable au lieu de simplement traiter $this->item (qui est un objet de type JObject, d’où la sortie) suivi littéralement de ->heading.

Dans votre cas, les guillemets ne sont pas nécessaires, mais cela pourrait être utile pour ajouter également une chaîne littérale au contenu de la propriété d'en-tête:

$browserbar= "The heading is {$this->item->heading}.";
7
David Fritsch

C'est en fait pour la sortie en-tête de page, mais il en va de même pour le titre du navigateur. J'ai eu cette situation plus fréquemment avec des composants tiers. Joomla stocke ces valeurs lorsque vous les spécifiez dans l'élément de menu, mais le composant les utilise ou non. Vous trouverez ci-dessous le code que j'ai ajouté à mes composants et parfois aux substitutions de modèles. Si vous n'êtes pas familier avec les remplacements de modèles, vous devriez lire Comment redéfinir la sortie du noyau Joomla! en premier.

Placez ce code avant tout autre code HTML dans le fichier de substitution de modèle. Il vérifie si vous avez spécifié d'afficher les en-têtes de page ou non. Dans l'affirmative, il l'utilisera, sinon il utilisera le titre du menu.

<?php if ($this->params->get('show_page_heading',1)) : ?>
    <h1><?php echo  $this->params->get('page_heading') ? $this->params->get('page_heading') : JFactory::getApplication()->getMenu()->getActive()->title; ?></h1>
<?php endif; ?>

Pour voir comment Joomla le fait par défaut, regardez components\com_content\views\article\tmpl\default.php

<div class="item-page<?php echo $this->pageclass_sfx?>">
    <?php if ($this->params->get('show_page_heading', 1)) : ?>
    <div class="page-header">
        <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
    </div>
    <?php endif;
1
GDP