web-dev-qa-db-fra.com

Afficher uniquement les articles de l'utilisateur actuel dans la vue de la catégorie à l'aide du plugin

Bonjour, j'essaye d'écrire un plugin de contenu qui ne montrera que les articles écrits par l'utilisateur actuellement connecté dans la vue des catégories.

En utilisant les déclencheurs onContentPrepare et onContentBeforeDisplay, je peux identifier l'utilisateur actuellement connecté et savoir si l'article lui appartient tout simplement.

La prochaine étape Ne pas afficher l'article est beaucoup plus compliquée et je n'ai pas été en mesure de le comprendre.

Alors, y a-t-il un moyen de NE PAS afficher facilement un article en utilisant ces déclencheurs de plug-in?

Bien sûr, voici le code:

function onContentBeforeDisplay($context, &$article, &$params, $limit=0)
     {

            $name = JFactory::getUser()->name;
            $author = $article->author;
            if ($author != $name) {
                /*  ?   */
            }

            // var_dump($article);
            // var_dump($params);
            // var_dump($context);
            return "";
    }
1
jalbasri

Vous n'avez pas besoin d'un plugin pour cela. Il suffit de remplacer une vue de catégorie et y mettre votre chèque.

Par exemple, pour la vue Blog, écrasez blog.php et autour de la ligne 60, vérifiez:

if ($item->created_by == JFactory::getUser()->id) :
    echo $this->loadTemplate('item');
}
endif;

Ce n’est bien sûr qu’un exemple, mais il montre le pouvoir de la primauté. J'espère que cela aidera.

4
Dmitry Rekun

Le plugin seul ne peut pas résoudre le problème, mais il peut être utilisé pour ajouter aux paramètres de l'article un champ avec l'utilisateur actuellement connecté. Dans la vue où la liste de catégories est générée, une simple instruction if est requise pour empêcher l'ajout d'articles par d'autres utilisateurs.

Le code du plugin:

function onContentBeforeDisplay($context, &$article, &$params, $limit=0)
     {
            $name = JFactory::getUser()->name;
            $article->logged_in = $name;
            // var_dump($params);
            return "";
     }

J'ai essayé $ params-> set ('logs_in', $ name); mais cela ne fonctionnerait pas dans la vue, je devais donc l'ajouter au paramètre $ article.

La vue à modifier est joomla/components/com_content/views/category/tmpl/default_article.php.

sous cette ligne:

<?php foreach ($this->items as $i => $article) : ?>

ajouter

<?php if ($this->items[$i]->author == $this->items[$i]->logged_in) : ?>

fermez la déclaration if en bas et le tour est joué. Le tableau présentera uniquement les articles créés par l'utilisateur actuel.

Modifier:

Grâce à la réponse de Dimitri, je vois maintenant que vous devriez pouvoir accéder directement à l'utilisateur dans les fichiers de vue sans le plug-in et vous devez utiliser un remplacement au lieu de modifier directement les fichiers de vue.

1
jalbasri