Lors de ma collaboration fructueuse avec Yann (iankoOol) sur le site du Professeur Cyclope j'ai été amené à travailler sur la publication et la prévisualisation des éléments de contenu de Catalog :
1. Le bouton de publication/dépublication d'un élément : BUG
On peut associer un des champs défini comme Champ Publié : Contenu principal > Nom, table et page de redirection > Champs publié et utiliser le bouton standard de publication dans la liste des éléments de ce contenu. Mais hélas un petit bug empêche le fonctionnement correct du tout : http://www.contao-forge.org/issues/2578
Il se corrige rapidement en changeant dans :
Code : Tout sélectionner
system/modules/catalog/Catalog.php
1122 if($this->Input->get('tid'))
1123 {
1124 // Update database
1125 $this->Database->prepare('UPDATE '.$objCatalog->tableName.' SET ' . $this->publishField . '=? WHERE id=?')
1126 ->execute($this->Input->get('state')=='1'?'1':'', $this->Input->get('tid'));
1127 exit;
1128 }
le $this->Input->post('tid') par $this->Input->get('tid') à la ligne 1126. C'est logique et cohérent avec le test de la ligne 1122
2. La prévisualisation des éléments de Catalog non publié
La définition de notre champ ne suffit pas, car dans les différentes requêtes SQL de Catalog le champ est utilisé directement (publie = 1) et Catalog ne prévoit pas de "liaison" avec le mode de prévisualisation.
Pour permettre aux utilisateurs de visualiser sans publication "réelle", le publie = 1 est remplacé par un insertag {{kiCatalogYL::isPublished}} qui va tenir compte du fait que l'on se trouve ou non en prévisualisation avec les élements non publiés masquer/afficher :
- si l'on est en Eléments non publiés : afficher , il est remplacé par : (publie=0 OR publie=1)
- dans le cas contraire par : publie=0
Il suffit d'utiliser/remplacer publie=1 par {{kiCatalogYL::isPublished}} dans les requêtes Catalog pour utiliser Éléments non publiés: afficher/masquer en prévisualisation pour les éléments de Catalog.
Voici la méthode et le code pour définir cet insertag :
1. créer un dossier dans system/module, on l'appelle monModule
2. créer dans monModule un dossier config[/b] avec un fichier config.php
3. ajouter la ligne à config.php :
Code : Tout sélectionner
system/module/monModule/config.php
<?php
$GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('KiHooksFrontend', 'kiReplaceInsertTags');
?>
pour définir notre hook replaceInsertTags
4. créer dans monModule le fichier de la classe KiHooksFrontend : KiHooksFrontend.php contenant :
Code : Tout sélectionner
system/module/monModule/KiHooksFrontend.php :
class KiHooksFrontend Extends Frontend
{
public function kiReplaceInsertTags($strTag) {
switch ($strTag) {
case 'kiCatalogYL::isPublished': // {{kiCatalogYL::isPublished}}
if ($this->Input->cookie('FE_PREVIEW')) {
return '(publie=0 OR publie=1)';
}
else {
return ' publie=1';
}
default:
return false;
}
}
}
Contao utilise l'existance d'un cookie FE_PREVIEW pour déterminer si l'on est en mode preview avec Eléments masqués : afficher (/contao/switch.php ligne 108).
J'espère n'avoir pas été trop long.
F2lt