web-dev-qa-db-fra.com

Module permettant d'afficher des articles sélectionnés dans le frontal avec des liens vers la page de l'article

J'écris un module pour permettre aux administrateurs de sélectionner jusqu'à 3 articles différents (tirés du contenu de Joomla) à afficher dans l'interface d'un site.

Je veux montrer le titre de l'article et l'image d'introduction, ainsi qu'un lien vers l'article.

J'ai écrit ce qui suit dans le fichier XML du module, qui montre la liste des articles dans le backend du module:

<fields name="params">
    <fieldset name="basic">
        <field
            name="article_title_1"
            type="sql"
            default="10"
            label="Select an article"
            query="SELECT id, title FROM #__content"
            value_field="title">
            <option value="">Please select your option</option>
        </field>
    </fieldset>
</fields>

Mais dans mon fichier default.php, lorsque j’utilise ce qui suit

<?php echo $params->get('article_title_1') ; ?>

Cela ne montre que l'ID de l'article, et non le titre.

2
RustyJoomla

Tout d'abord, je vais commencer par une note latérale. Je suppose que vous faites cela dans Joomla 3.6, ce qui est bien, mais je l’ai testé dans Joomla 3.7 et il renvoie une erreur PHP, sauf si vous spécifiez value_field="title", alors assurez-vous de l'utiliser à la place:

<field
    name="article_title_1"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id, title FROM #__content"
    key_field="id"
    value_field="title"
/>

La requête elle-même will vous fournira une liste déroulante d'articles, mais les valeurs <option> Seront l'identifiant de l'article, d'où la raison pour laquelle echo $params->get('article_title_1'); ne vous donne que l'identifiant .

Vous pouvez ensuite utiliser ce qui suit pour obtenir le titre et l'image d'introduction:

$id      = $params->get('article_title_1');
$article = JControllerLegacy::getInstance('Content')->getModel('Article')->getItem($id);
$image   = json_decode($article->images);

echo '<a href="' . JRoute::_('index.php?option=com_content&view=article&id=' . $id) . '">' . $article->title . '</a>';

if ($image !== null)
{
    echo '<img src="' . $image->image_intro . '" alt="">';
}

J'espère que cela t'aides

2
Lodder