Configuration de débug:

Dans le fichier /ezpublish/settings/siteaccess/monsite/site.ini.append.php

# <conf de debug>  

[DebugSettings]
DebugRedirection=disabled
Debug=inline
DebugOutput=enabled
DisplayDebugWarnings=enabled
ScriptDebugOutput=enabled

[TemplateSettings]
#Debug=enabled
DevelopmentMode=enabled
TemplateCompile=disabled
TemplateCache=disabled
ShowUsedTemplates=enabled
ShowXHTMLCode=disabled
#ShowMethodDebug=enabled
#NodeTreeCaching=disabled

# </conf de debug>

Traduire l'interface de eZ Publish 4.x en français :

Afficher une version traduite d'un attribut d'un objet, dans un langue donnée

{def $mynode = fetch( 'content', 'node', hash('node_id', 9999) )

$language='ITA-it'

$attributes=fetch( 'content', 'contentobject_attributes', hash( 'version', $mynode.object.current, 'language_code', $language ) )

} 

{if is_set($attributes.0)}
{attribute_view_gui attribute=$attributes.0}
{/if}

Masquer la trace dans une page en particulier

Créer un override pour le pagelyaout.tpl de ce noeud / objet et ajouter à la fin du pagelayout 'overridé'

<!-- <!--DEBUG_REPORT--> -->

Affiche le contenu d'un texte riche (XML Block) sans aucune balise XML ou XHTML :

{$my_node.data_map.my_xmlblock_attribute.content.output.output_text|strip_tags|shorten( 200 )|simplify|trim}

Gérer les override de templates en matchant une variable

monTemplate.tpl :

{if $some_value|eq( 'something' )}
{set scope=global persistent_variable='caramba'}
{/if}

override.ini :

[test_side_layout]
Source=pagelayout.tpl
MatchFile=pagelayout_caramba.tpl
Subdir=templates
Match[persistent_variable]=caramba

Overrider un pagelayout pour une vue d'un module dans une extension

$Result['pagelayout'] = 'pagelayout_mylayout.tpl';

Proposer des classes de style CSS dans OnlineEditor

  • Créer un fichier CSS dédié :
/* Style onlineeditor.css */
 
 /* embed : */
 .image_a_gauche
 {
        float:left;
 }
 .image_a_droite
 {
        float:left;
 }
  • Créer un content.ini avec les directives dédiées :
#content.ini
[embed]
AvailableClasses[]=image_a_gauche
AvailableClasses[]=image_a_droite

Cf. Documentation

No template could be loaded for "node/view/full.tpl" using resource "design"

  • Vérifier que le répertoire /ezpulibsh/design/mondesign/override et son contenu appartiennent à www-data. Ce répertoire n'existant pas défaut, une fois créé il prend par défaut les droits de son créateur (vous!) et n'est alors pas accessible à Apache.
  • Au besoin affecter les bons droits :
sudo chmod -R 777 override/
sudo sudo chown -R www-data:www-data override/

Afficher une image (attribut de classe) dans .tpl

<img class="maClasse"
 alt="{$node.data_map.monAttributImage.content.alternative_text|wash()}"
 src={$node.data_map.monAttributImage.content.original.url|ezroot()} />


Ne pas oublier le ezroot()...

Autoriser les saut de ligne dans Online Editor

dans /settings/override/content.ini :

[paragraph]
AllowEmpty=true

Paginer une liste '$group', avec des items regroupés 3 par 3, dans un foreach

 {foreach $group as $key=>$item}
	{if mod($key,3)|eq(0)}
	<div class="group">
	{/if}
	<div class="item">{$item.name|wash()}</div>
	</div><!-- /item -->
	{if or(mod($key,3)|eq(2),$key|inc|eq(count($group)))}
	</div><!-- /group -->
	{/if}
 {/foreach}

Comparer des dates

{if $offre.data_map.AttribPublication_debut.content.timestamp|lt(currentdate())} 
<br />Le debut de publication 
{$offre.data_map.AttribPublication_debut.content.timestamp} 
commence avant ajourd'hui {currentdate()}
{/if}

Créer un lien direct vers un fichier dans un bloc XML dans l'Online Editor :

Ajouter le fichier comme un objet (icône) trombone en mode embed-inline

Ajouter dans le override.ini :

[file_embed-inline]
Source=content/view/embed-inline.tpl
MatchFile=embed/file_embed-inline.tpl
Subdir=templates
Match[class_identifier]=file

Créer le fichier file_embed-inline.tpl dans le design/mondesign/override/templates/embed/ :

{$object.name|wash} :
<a href={concat( 'content/download/',
$object.data_map.file.contentobject_id, '/',
$object.data_map.file.id,'/version/',
$object.data_map.file.version , '/file/',
$object.data_map.file.content.original_filename|urlencode )|ezurl}>


{$object.data_map.file.content.original_filename|wash(xhtml)}</a>
({$object.data_map.file.content.filesize|si(byte, kilo)})

Lister des objets selon la date de début et de fin de publication

{def $timestamp = currentdate()
 $my_contents=fetch( 'content','tree',hash(
   parent_node_id, $node.node_id,
   attribute_filter, array(
     array( 'maClasse/attribut_publication_debut', '<=', $timestamp ),
     array( 'maClasse/attribut_publication_fin', '>=', $timestamp ))
     )
   )
}

Faire un fil d'Arianne

Créer un fil d'arianne depuis la racine vers la page courante, de la forme :

Accueil > Folder 1 > Sous folder 1.1 > Article 1.1.1
{foreach $module_result.path as $Path} 
  {if $Path.url}
    <a href={$Path.url_alias|ezroot}>{$Path.text|wash}</a> >
  {else}
    {$Path.text|wash}
  {/if}
{/foreach}

Overrider le template pagelayout.tpl pour une section entière

  • Créer des sections dans le site
  • Pour la section concernée, créer un fichier de template pagelayout_sectionZ.tpl dans design/override/templates/
  • Modifier le fichier de settings override.ini.append.php :
[home_section_Z]
Source=pagelayout.tpl
MatchFile=pagelayout_sectionZ.tpl
Subdir=templates
Match[section]=17

Passer à la ligne dans une image générée par texttoimage

Utiliser l'opérateur wrap :

{$node.name|wrap(20)|texttoimage( 'arial',,20,,,'#064D95',,,,5 )}

ou utiliser un caractère spécial (comme '$') pour introduire manuellement un passage à la ligne à un endroit particulier de la chaine :

{if $node.name.content|contains('$')}
  {def $wrappedTitleArr = $node.name.content|explode( '$' )}
  <h2>
  {for 0 to $wrappedTitleArr|count|dec as $counter}
    {$wrappedTitleArr$counter|texttoimage( 'arial',,20,,,'#064D95',,,,5 )}
    {delimiter}<br />{/delimiter}
  {/for}
 </h2>
 {undef $wrappedTitleArr}
{/if}

Afficher une date dans un format particulier

Les dates dans eZ Publish (et si possible dans les extensions) sont stockées au format TimeStamp. Pour générer / convertir un timestamp dans un format "lisibles" (dd/mm/YYY, etc), il y a TimeStamp Converter, une extension de Firefox. Bien pratique pour générer rapidement des données de tests.

L'affichage des dates peut être customisé, et on peut définir plusieurs affichages pour un même site : date, datetime, date avec jour de la semaine, etc. Cf. le datetime.ini dans l'extension ticket de la CCMO par exemple :

Dans un .tpl :

{$monObjet.MonAttribut_Date|datetime( 'fullDateTimeFR' )}

Dans le datetime.ini :

[ClassSettings]
# Jeudi 01/05/2008, 21h00 :
Formats[fullDateTimeFR]=%l %d/%m/%Y, %Hh%i

Clear cache in a php file

// Clear for node with ID 123
$nodeID = 123;
eZContentCache::cleanup( array( $nodeID ) );

Trier des résultats de recherche ou des relations d'objets sur un attribut en particulier

Attention, cet opérateur est inutile si vous utiliser un fetch list/tree ou le moteur eZFind. Cet opérateur n'est utile que pour trier les résultats du moteur de recherche ou les relations d'objets, pour lesquels le tri avancé (i.e. par attribut de classe de contenu) n'est pas disponible nativement. Voici ci-dessous un exemple d'opérateur pour trier les résultats d'un moteur de recherche (celui proposé par défaut) sur un attribut de date de début de publication 'debut_publication'. Bien sûr, cet exemple n'est pertinent que si votre moteur de recherche ne renvoie que des objets de contenus possédant cet attribut 'debut_publication', comme dans un moteur de recherche uniquement dédié aux actualités par exemple :

Code dans le .tpl des résultats de recherche :

{set $search_result=$search_result|objectsdatesort()}

Code de l'opérateur en PHP :

function modify( $tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters )
    {
                switch ($operatorName)
                {
                        case 'objectsdatesort' :
                        {
                                $objects = $operatorValue;
                                $priorities = array();
                                foreach ($objects as $key=>$object) {
                                        if (isset($object)){
                                        $mainObj = eZFunctionHandler::execute('content','object', array('object_id' => $object->ContentObjectID) );
                                        $data_map = $mainObj->dataMap();
                                        array_push($priorities,$data_map['debut_publication']->DataInt);
                                        }
                                        else
                                        {       
                                                // Les deux tableaux doivent faire la même taille
                                                // => on retire du tableau $objects les objets inutiles au tri
                                                unset ($objects[$key]);
                                        }
                                }
                                array_multisort($priorities,SORT_NUMERIC,SORT_ASC,$objects);
                                $operatorValue = $objects;
                        }
                        break;
                }
    }

Les Traductions

Dans translations/fre-FR/translation.ts

<!DOCTYPE TS><TS>
<context>
    <name>design/monsite/monModule/maVue</name>
    <message>
        <source>My Word</source>
        <translation>Mon Mot</translation>
    </message>
</context>
</TS>


Dans un .tpl :

{'My Word'|i18n( 'design/ monsite/monModule/maVue' )}

Debuggage

Paramètres d'un module/view :

{$view_parameters|attribute('show')}

Résoudre "à la dure" un problème d'url alias non résolus par updateniceurls.php

A la ligne 1096 du fichier bin/php/updateniceurls.php, commenter / remplacer :

$hasChanged = $node->updateSubTreePath( false );

par

$hasChanged = $node->updateSubTreePath( true );

Puis dans mysql / phpmyadmin, faire un

TRUNCATE ezurlalias_ml;

Puis lancer php bin/php/updateniceurls.php --update-nodes -s monSiteAccess

Enfin rétablir le script bin/php/updateniceurls.php à l'état d'origine

Construire des formulaires

Trois articles e français chez Linuxorable.fr, passés à la trappe, mais récupérable chez Archive.org :

Un autre article en français :