Intégrer un template category dans le template item

More
13 years 8 months ago #9552 by juzam
Bonjour à tous
Je suis en train de créer un template un peu spécial, dans lequel je voudrais pouvoir afficher la liste des items (=template category_items) sur la vue de chaque item.
Bien entendu, un simple
Code:
$this->loadTemplate('items');
dans le template item renvoi une erreur, puisqu'il cherche item_items et non pas category_items.

La question est donc : comment récupérer l'instance de la bonne classe de template pour procéder à cet appel.

J'espère avoir été assez clair, n'hésitez pas à demander des eclaircissements si ce n'est pas le cas.
Merci de m'avoir lu.

Please Log in or Create an account to join the conversation.

More
13 years 7 months ago #9746 by juzam
Un petit up, je n'ai toujours pas résolu ce problème.
Merci!

Please Log in or Create an account to join the conversation.

More
13 years 7 months ago #9814 by micker
... desoler je comprend pas la logique du truc ....
que veus tu realisé ?
8-)

FLEXIcontent is Free but involves a very big effort on our part.
Like the our support? (for a bug-free FC, despite being huge extension) Like the features? Like the ongoing development and future commitment to FLEXIcontent?
-- Add your voice to the FLEXIcontent JED listing reviews. Thanks![/size]

Please Log in or Create an account to join the conversation.

More
13 years 6 months ago #10775 by juzam
Bah j'ai réussi à m'en sortir de façon plus ou moins clean. Je ferais un post pour expliquer ca quand je serais moins charrette.

En gros, j'ai une catégorie qui contient des articles, et je veux afficher à la fois la liste des articles et l'article sélectionné.

Si ca intéresse quelqu'un, venez me tirer la manche dans quelques jours.

Please Log in or Create an account to join the conversation.

More
13 years 6 months ago #10778 by micker
cool on le mettra dans les trucs et astuces merci d'avance

FLEXIcontent is Free but involves a very big effort on our part.
Like the our support? (for a bug-free FC, despite being huge extension) Like the features? Like the ongoing development and future commitment to FLEXIcontent?
-- Add your voice to the FLEXIcontent JED listing reviews. Thanks![/size]

Please Log in or Create an account to join the conversation.

More
13 years 6 months ago #10845 by juzam
Bon, c'est parti.
Résumé des épisodes précédents :
On dispose d'un certain nombre d'items rangés dans une catégorie. On veut faire un template pour une page qui contiendra à la fois la liste des items, et l'item sélectionné (avec une selection au hasard pour la première fois).
Exemple concret : www.atelierdevisu.fr/index.php?option=co...ory&cid=12&Itemid=26
La catégorie c'est "expositions passées", les items sont une fiche expo.

La solution proposée n'est pas forcément la meilleure, et il est possible que dans certain cas ca fasse des choses abominables (par exemple si vous utilisez le type 'minigallery'), il est donc recommandé d'avoir un minimum de connaissances et de compréhension avant de vous lancer la dedans.

Ensuite, le principe est assez simple. On appelle toujours la view category en rajoutant un identifiant pour l'item dans l'adresse.

Concrètement, voici comment se passe la selection de l'id de l'article :
Code:
if(!empty($_GET['iid'])){ $id = JRequest::getVar('iid','-1','get','int'); }else{ $keys = array_keys($this->items); $rnd = mt_rand(0,count($keys)-1); $id = $this->items[$keys[$rnd]]->id; }

Ensuite on affiche l'item comme ca :
Code:
require_once(JPATH_COMPONENT.DS.'views'.DS.'items'.DS.'view.html.php'); require_once(JPATH_COMPONENT.DS.'models'.DS.'items.php'); $mi = new FlexicontentModelItems(); $mi->setId($id); $vi = new FlexicontentViewItems(); $vi->setModel($mi,true); $vi->display();

Ce morceau de code va appeller le template de l'item en question.

ensuite un simple :
Code:
echo $this->loadTemplate('items');
pour afficher la liste.

Dans category_items.php, il faut penser à mettre à jour les lien avec l'identifiant de l'item.
Il faut donc construire le lien ainsi :
Code:
<a '.$active.'href="'.JRoute::_(FlexicontentHelperRoute::getCategoryRoute( $this->category->slug)).'&iid='.$item->slug.'">;

Voila une première approche rapide, dans les grandes lignes. Tout cela est bien évidement perfectible, et plus complexe (comme cette page www.atelierdevisu.fr/index.php?option=co...ory&cid=19&Itemid=32 ou 2 niveaux sont affichés : les sous catégories, et les items de chaque sous catégorie.

Les problèmes :
Un problème majeur quand on commence à jouer à ça se trouve au niveau perf.
Le problème semble se trouver plutot au niveau de la conception de joomla (avec les plugins) que de flexi, toujours est il que lorsque les items d'une catégorie sont simplement listés, ils sont tous calculés (appel de la méthode function onDisplayFieldValue).
Ce qui peut génerer un maximum de requetes... la j'en suis a un record de 150 par page, ce qui est inacceptable pour un truc sérieux, et de toutes façons ca foirera sur n'importe quel serveur mutualisé. Il est donc important, à mon avis, d'optimiser un maximum les requetes, de créer des caches dans les modeles pour éviter d'envoyer douze fois la même, etc). Et de pouvoir mieux désactiver tout ce qui est inutile dans de nombreux cas (commentaires, votes, tags, etc) - pour ma part, en général, j'arrache tout.

D'autre part, certains plugins, comme minigallery, n'ont pas été écrit en pensant à ce genre d'utilisation, et écrivent directment du code dans les pages, au lieu de simplement préparer l'item, ce qui peut générer, au choix :
-un quantité de code inutile, proportionnelle au nombre d'item
-des conflits javascript


De mon coté, j'ai du réecrire une bonne partie du plugin minigallery pour avoir quelque chose qui convienne à mon client.

Vos commentaires/critiques/questions sont les bienvenus.

Please Log in or Create an account to join the conversation.

Moderators: vistamediajoomlacornerggppdk
Time to create page: 0.320 seconds
Save
Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
Essential
These cookies are needed to make the website work correctly. You can not disable them.
Display
Accept
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Accept
Decline