30/07/2012, 18:00:44
Pour cmsms 1.11
Basé sur le plugin de Bredt : http://www.cmsmadesimple.fr/forum/viewtopic.php?id=3769
Vous avez une page "artistes et vous avez créé des pages enfants avec le nom de tous ces artistes.
Vous souhaiteriez créer une navigation latérale qui affiche tous les noms des artistes dans l'ordre alphabétique (ou inverse) sans devoir réorganiser l'ordre des pages enfants dans l'administration ?
Vous souhaitez afficher les news dans l'ordre alphabétique inverse des titres ?
Vous souhaitez afficher les "définitions de champs" des news dans l'ordre des 'id', du 'name', du 'type' ou encore de sa 'value' ?
Vous souhaitez ordonner les array d'un objet ?
Ce plugin est votre meilleur ami
Tutoriel :
En premier lieu, vous téléchargez le plugin que vous placerez dans le dossier plugins
OU
code à coller dans un fichier (modifier.sort_object_array.php) que vous placerez dans le répertoire plugins.
1) Explication pour la gestion de menu :
Copiez le gabarit de menu de votre sidebar et collez-le dans un nouveau que vous appellerez "artistes"
Vous n'avez qu'à ajouter le modificateur du plugin (|sort_object_array:'menutext') sur le premier foreach (ligne 3)
Je l'ai déjà fait pour vous
Ensuite, vous ouvrez votre gabarit de page et vous collez le code suivant dans votre sidebar
2) Explications pour afficher le sommaire des news dans l'ordre alphabétique inverse des titres :
Cherchez la ligneet ajoutez le modificateur :
Vous avez vu ? Il y a un - devant le champ à trier.
Un - devant le nom du champ à trier inverse l'ordre de tri (s'il n'y a que le nom on obtient l'ordre ascendant).
3) Explications pour trier les définitions de champ :
Ouvrez votre gabarit de détail des news et ajoutez le modificateur :
Pour connaître les valeurs possibles, placez {$entry->fields|var_dump}
et vous obtiendrez plus ou moins ceci :
array (size=5)
'image' =>
object(news_field)[157]
private '_data' =>
array (size=7)
'id' => string '1' (length=1)
'name' => string 'image' (length=5)
'type' => string 'textbox' (length=7)
'max_length' => string '255' (length=3)
'item_order' => string '1' (length=1)
'public' => string '1' (length=1)
'value' => string 'eee' (length=3)
'champs2' =>
object(news_field)[153]
private '_data' =>
array (size=7)
'id' => string '2' (length=1)
'name' => string 'champs2' (length=7)
'type' => string 'textbox' (length=7)
'max_length' => string '255' (length=3)
'item_order' => string '2' (length=1)
'public' => string '1' (length=1)
'value' => string 'ceci est e champs 2' (length=19)
'champs3' =>
...
Enjoy
Basé sur le plugin de Bredt : http://www.cmsmadesimple.fr/forum/viewtopic.php?id=3769
Vous avez une page "artistes et vous avez créé des pages enfants avec le nom de tous ces artistes.
Vous souhaiteriez créer une navigation latérale qui affiche tous les noms des artistes dans l'ordre alphabétique (ou inverse) sans devoir réorganiser l'ordre des pages enfants dans l'administration ?
Vous souhaitez afficher les news dans l'ordre alphabétique inverse des titres ?
Vous souhaitez afficher les "définitions de champs" des news dans l'ordre des 'id', du 'name', du 'type' ou encore de sa 'value' ?
Vous souhaitez ordonner les array d'un objet ?
Ce plugin est votre meilleur ami
Tutoriel :
En premier lieu, vous téléchargez le plugin que vous placerez dans le dossier plugins
OU
code à coller dans un fichier (modifier.sort_object_array.php) que vous placerez dans le répertoire plugins.
Code :
[== Indéfini ==]
<?php
/**
* Smarty plugin
*/
/**
* Smarty sort_object_array modifier plugin
*
* Type: modifier
* Name: sort_object_array
* Help : http://www.cmsmadesimple.fr/forum/viewtopic.php?id=4439
* @link
* @author Jean le Chauve
* @param array
* @param string
* @return array
* put '-' before the value for inverse
*/
function smarty_cms_modifier_sort_object_array($objArray, $sortby='')
{
if (!is_array($objArray)) {
die("not array, you cannot use the modificator sort_object_array with this variable");
}
$dir = '>';
if ($sortby[0] == '-')
{
$sortby = substr($sortby, 1);
$dir = '<';
}
$cmp = create_function('$a,$b', 'return strtolower($a->'.$sortby.')'.$dir.'strtolower($b->'.$sortby.');');
usort($objArray, $cmp);
return $objArray;
}
?>
1) Explication pour la gestion de menu :
Copiez le gabarit de menu de votre sidebar et collez-le dans un nouveau que vous appellerez "artistes"
Code :
{if $count > 0}
<ul>
{foreach from=$nodelist|sort_object_array:'menutext' item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true or ($node->current == true and $node->haschildren == true)}
<li class="menuactive menuparent"><a class="menuactive menuparent" href="{$node->url}"><span>{$node->menutext}</span></a>
{elseif $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class="parent"><a class="parent" href="{$node->url}"><span>{$node->menutext}</span></a>
{elseif $node->current == true}
<li class="currentpage"><span>{$node->menutext}</span>
{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>
{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />
{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
Je l'ai déjà fait pour vous
Ensuite, vous ouvrez votre gabarit de page et vous collez le code suivant dans votre sidebar
Code :
[== Indéfini ==]
<div class="pageSidebar">
<span class='titlesidebar'>Tous les artistes</span>
{menu template="artistes" start_level="2"}
</div>
2) Explications pour afficher le sommaire des news dans l'ordre alphabétique inverse des titres :
Cherchez la ligne
Code :
{foreach from=$items item='entry'}
Code :
[== Indéfini ==]
{foreach from=$items|sort_object_array:'-title' item='entry'}
Un - devant le nom du champ à trier inverse l'ordre de tri (s'il n'y a que le nom on obtient l'ordre ascendant).
3) Explications pour trier les définitions de champ :
Ouvrez votre gabarit de détail des news et ajoutez le modificateur :
Code :
[== Indéfini ==]
{if isset($entry->fields)}
{foreach from=$entry->fields|sort_object_array:'name' item='field'}
<div class="NewsDetailField">
et vous obtiendrez plus ou moins ceci :
array (size=5)
'image' =>
object(news_field)[157]
private '_data' =>
array (size=7)
'id' => string '1' (length=1)
'name' => string 'image' (length=5)
'type' => string 'textbox' (length=7)
'max_length' => string '255' (length=3)
'item_order' => string '1' (length=1)
'public' => string '1' (length=1)
'value' => string 'eee' (length=3)
'champs2' =>
object(news_field)[153]
private '_data' =>
array (size=7)
'id' => string '2' (length=1)
'name' => string 'champs2' (length=7)
'type' => string 'textbox' (length=7)
'max_length' => string '255' (length=3)
'item_order' => string '2' (length=1)
'public' => string '1' (length=1)
'value' => string 'ceci est e champs 2' (length=19)
'champs3' =>
...
Enjoy