Forum CMS Made Simple FR
[Résolu] Multiples content blocks : deux questions... - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : [Résolu] Multiples content blocks : deux questions... (/thread-1967.html)



[Résolu] Multiples content blocks : deux questions... - koramarok - 17/05/2012

Bonjour,

j'ai découvert avec étonnement et plaisir la possibilité de créer des nouveaux content blocks directement dans les gabarits (grace à l'inclusion de tags {content block="monbloc"} ) et que cette création se répercute directement dans l'admin. En voilà une fonctionnalité intéressante !

Mais j'aimerais savoir s'il y a moyen d'organiser l'ordre d'apparition de ces nouveaux blocs dans l'interface d'admin, car par défaut ils apparaissent dans l'ordre ou ils sont appelés dans le gabarit, ce qui s'avère peu pratique dans mon cas Tongue

Possible? Pas Possible?

Deuxième question un peu bête : comment peut-on récupérer la valeur de ces même blocs dans des UDT?


[Résolu] Multiples content blocks : deux questions... - kraygoon - 18/05/2012

Si tu veux organiser l'ordre d'apparition comme tu veux, ça se fait toujours suivant l'ordre d'appel dans les gabarits.
Si cet arrangement te dérange, je suppose que c'est parce que tu appelles tes blocs à différents endroits du gabarits.

Pour y remédier, tu déclares tes blocs au début de ton gabarit :
Code :
[== SMARTY==]
{content block="monbloc1" ..... assign="bloc1"}
{content block="monbloc2" ..... assign="bloc2"}
{content block="monbloc3" ..... assign="bloc3"}

Et plus loin dans ton gabarit tu fais appelles aux variables qui représentent tes blocs :
Code :
[== SMARTY==]
<div id="blabla">
{$bloc2}
</div>
<div id="toto">
{$bloc1}
</div>
<div id="plop">
{$bloc3}
</div>

De la sorte tes déclarations de blocs sont dans l'ordre que tu veux et leur utilisation au sein du gabarit dans un autre ordre.


[Résolu] Multiples content blocks : deux questions... - kraygoon - 18/05/2012

Si tu veux organiser l'ordre d'apparition comme tu veux, ça se fait toujours suivant l'ordre d'appel dans les gabarits.
Si cet arrangement te dérange, je suppose que c'est parce que tu appelles tes blocs à différents endroits du gabarits.

Pour y remédier, tu déclares tes blocs au début de ton gabarit :
Code :
[== SMARTY==]
{content block="monbloc1" ..... assign="bloc1"}
{content block="monbloc2" ..... assign="bloc2"}
{content block="monbloc3" ..... assign="bloc3"}

Et plus loin dans ton gabarit tu fais appelles aux variables qui représentent tes blocs :
Code :
[== SMARTY==]
<div id="blabla">
{$bloc2}
</div>
<div id="toto">
{$bloc1}
</div>
<div id="plop">
{$bloc3}
</div>

De la sorte tes déclarations de blocs sont dans l'ordre que tu veux et leur utilisation au sein du gabarit dans un autre ordre.


[Résolu] Multiples content blocks : deux questions... - Jean le Chauve - 18/05/2012

Citation :Mais j'aimerais savoir s'il y a moyen d'organiser l'ordre d'apparition de ces nouveaux blocs dans l'interface d'admin, car par défaut ils apparaissent dans l'ordre ou ils sont appelés dans le gabarit, ce qui s'avère peu pratique dans mon cas
Bien sûr, mais il faudrait savoir ce que tu veux comme ordre d'apparition et quelles sont les conditions. Il suffit de créer ces conditions avec smarty : http://www.smarty.net/docsv2/fr/language.function.if.tpl

Citation :comment peut-on récupérer la valeur de ces même blocs dans des UDT?
Déjà plus complexe, cela fait appel à l'api cmsms (http://www.cmsmadesimple.org/apidoc/) et en particulier à la classe GlobalContentOperations : http://www.cmsmadesimple.org/apidoc/CMS/GlobalContentOperations.html
Tu crées une udt "show_all_gcb" :
Code :
[== PHP ==]
$gcbOps =cmsms()->GetGlobalContentOperations();
$gcbs   =  $gcbOps->LoadHtmlBlobs();
foreach($gcbs as $gcb) {
   echo '<div class="gcb">' . $gcb->content . '</div>';
}
Si tu colles cette udt dans une page à multiple blocs, tu verras leurs contenus ; à toi de modifier le code selon tes besoins. Code existant sur le wiki anglais : http://wiki.cmsmadesimple.org/index.php/Share_your_tags_here


[Résolu] Multiples content blocks : deux questions... - koramarok - 18/05/2012

Merci pour les précisions !

Je teste ça de suite...


[Résolu] Multiples content blocks : deux questions... - Jean le Chauve - 18/05/2012

Pour la récupération du contenu dans l'udt, je me suis gouré, ce que je t'ai donné récupère les blocs de contenus globaux.
Je regarde pour les content blocks et je te dis quoi.


[Résolu] Multiples content blocks : deux questions... - koramarok - 18/05/2012

en fait j'y suis arrivé à coup de php et de requete sql.
c'est pas super propre, mais ça marche...


[Résolu] Multiples content blocks : deux questions... - Jean le Chauve - 18/05/2012

C'est bien pour toi, mais le but d'une communauté est de s'entraider, ce serait sympa que tu nous indiques comment tu as procédé et ton code Wink

Voilà l'udt de récupération pour le "bloc1"
Code :
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$content_obj = $contentops->GetContentObject();
$page_cont = $content_obj->GetPropertyValue('bloc1');//à modifier suivant le nom du bloc voulu
$arr = preg_split("/[\s]+/", $page_cont);
$arr = array_slice($arr,0);
$page_cont = join(' ',$arr);
echo '<div id="bloc2">'.$page_cont.'</div>';



[Résolu] Multiples content blocks : deux questions... - koramarok - 22/05/2012

J'ai procédé en mettant ce code dans un UDT appelé en homepage.

Premier temps je récupère les valeurs :
Code :
[== PHP ==]
global $gCms;
$db = &$gCms->GetDb();

$sql = "SELECT content.content_id, nom_artiste.content nom_artiste, titre_album.content titre_album
    FROM ".cms_db_prefix()."content content
    JOIN ".cms_db_prefix()."content_props nom_artiste on (content.content_id = nom_artiste.content_id and nom_artiste.prop_name='nom_Artiste')
    left JOIN ".cms_db_prefix()."content_props titre_album on (content.content_id = titre_album.content_id and titre_album.prop_name='titre_Album')


Deuxième temps je les affiche :

Code :
[== PHP ==]
    order by content.hierarchy DESC limit $limit";

$dbresult = $db->Execute($sql);
if( !$dbresult )
{
    echo 'DB error: '. $db->ErrorMsg()."<br/>";
}
while($dbresult && $row = $dbresult->FetchRow()){
    echo "<h3>".$row['nom_artiste']."</h3>";
    echo "<h4>".$row['titre_album']."</h4>";
}