2016-07-05 1 views
0

Je suis nouveau dans un projet Contao et le seul dev du projet ....Lecture et affichage de données à partir d'un module personnalisé

Un module personnalisé est créé. Pour ce module personnalisé, il existe un formulaire de saisie de données (défini dans un fichier php dans le dossier dca), dans lequel un utilisateur peut entrer toutes les données qui sont ensuite stockées dans une table personnalisée. Le code du module suit la disposition indiquée dans le blogpost 'Créer un module personnalisé - les bases' (http://blog.qzminski.com/article/create-a-custom-module-the-basics.html).

J'ai vu une page PHP (dans le dossier templates) qui récupère toutes les données de la table de base de données personnalisée (est auto-injectée via une variable?) Et les formate dans une table html.

C'est ce qui est construit jusqu'à maintenant.

Maintenant, ce que je veux faire est de créer une page d'affichage pour un élément individuel. Normalement, ce sera:

  • créer un lien dans le tableau html existant (avec l'identifiant de l'enregistrement) qui relie à une nouvelle page (donc par exemple pagenamewhichidonotknow?id=34)
  • et sur cette page, recevoir l'identifiant qui est envoyé par le lien (l'obtenir du querystring?),
  • obtenir les données de la databasetable personnalisée (ne savent pas comment)
  • puis créer une belle page (je ne sais comment faire ;-))

Je réalise que c'est une grande question, mais je ne sais vraiment pas par où commencer. Googling me montre beaucoup de pages avec cette mise en garde "Ce mot a été écrit pour Contao 2.x et une grande partie de son information est obsolète, lisez-la attentivement et utilisez-la comme un guide généraliste." et d'autres pages sont en allemand, ce qui est, malgré l'avoir appris pendant 3 ans au lycée, pas mon usp.

Toute aide est appréciée.

Répondre

1

J'espère que je vous aurai bien. Pour obtenir ce que vous voulez, vous devrez créer deux modules frontend, listModule et detailsModule et deux pages, listPage et donc créer page de détail ces deux pages dans le back-end (structure du site). Vous ajouterez listModule au listPage et la detailsModule à page Détails.

Ne jamais coder en dur l'identifiant de la page sauf si vous n'avez aucune option.

permet de démarrer sur la façon de créer un lien vers le page Détails en créant le listModule et l'ajouter à la listPage

  1. Créer /system/modules/my_module/dca/tl_module.php
  2. Ajoutez le code suivant et enregistrez-

$GLOBALS['TL_DCA']['tl_module']['palettes']['my_module'] = '{title_legend},name,headline,type,linkToDetail;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space';

$GLOBALS['TL_DCA']['tl_module']['fields']['linkToDetail']=array( 'label' => &$GLOBALS['TL_LANG']['tl_module']['linkToDetail'], 'exclude' => true, 'inputType' => 'pageTree', 'foreignKey' => 'tl_page.title', 'eval' => array('fieldType'=>'radio'), 'sql' => "int(10) unsigned NOT NULL default '0'", 'relation' => array('type'=>'hasOne', 'load'=>'eager') );

Cela va créer une colonne dans votre tableau personnalisé que vous utiliserez plus tard pour accéder à la page ID dans le modèle

  1. Exécutez l'outil d'installation.
  2. Travaillez sur les erreurs qui pourraient survenir. Si aucune, passez à côté
  3. Créer le module frontend selon cette url Front end module

  4. Dans la fonction compile faire comme ci-dessous

protected function compile(){

$objItems = $this->Database->execute("SELECT * FROM my_custom_table"); 


    if (!$objItems->numRows) 
    { 
     return; 
    } 

    $arrItems = array(); 

    // Generate item rows 
    while ($objItems->next()) 
    { 

     $objPage = \PageModel::findPublishedById($objItems->linkToDetail); 

     $arrItems[] = array 
     (
      'linkToDetail' => $objPage->getFrontendUrl('itemId='.$objItems->id), 
     ); 
    } 

    $this->Template->items = $arrItems; 
} 

s'il vous plaît noter la Paramètre itemId ajouté à l'URL

  1. Créer un modèle /system/modules/my_module/templates/my_template.html5

    et vous serez en mesure d'accéder facilement aux articles

<?php if($this->items): foreach ($this->items as $item): ?>

<div class="item">

<?php if ($item['linkToDetail']): ?>

<a href="<?php echo $item['linkToDetail']; ?>">Please take me to the details page</a><?php endif; ?>

</div>

<?php endforeach; endif; ?>

  1. Allez maintenant à themes -> modules ->new module et de créer un nouveau module. Je suppose que vous avez suivi les instructions dans ce lien sur la façon d'ajouter votre module à votre liste de modules. En supposant que vous avez ajouté au groupe divers, sélectionnez votre module. Vous verrez un sélecteur de page avec le libellé "linkToDetail". sélectionnez le détailsPage que vous avez créé au début.

  2. Rendez-vous au articles -> listPage -> new sélectionnez 'module' comme type d'élément et choisissez le listModule ci-dessus. Nous sommes bons ici. prévisualisez votre page et vous devriez être bon.

permet maintenant construire les detailsModule et l'ajouter à la page Détails

  1. Suivez toutes les étapes ci-dessus seulement dans la fonction compile du module de détails, vous sélectionnerez les données de détails comme follows``

$objItemDetails = $this->Database->execute("SELECT * FROM my_custom_table where id=".\Input::get('itemId'));

les étapes 7, 8 et 9 sont identiques.

Cela aidera dans le cas où les changements de page de détails dans les temps d'identification. Cela le rend assez dynamique.

Espérons que cela aide

+0

Excellent. Merci beaucoup. – Michel

1

Pour obtenir la liste des articles dans le frontend:

Étape 1/créer une liste Module:

  • aller à "thèmes"
  • cliquez sur les engrenages-icon
  • créer un nouveau module
  • donnez-lui un nom
  • choisissez le type de module dans la liste déroulante (le nom du modèle à cho OSE devrait ressembler à ceci: "yourCustomModulNameList" ou similaire)

Etape 2/embed la nouvelle liste-module dans un article:

  • aller à des articles dans le menu principal
  • modifier l'article qui doit contenir la liste
  • choisissez nouveau-élément de contenu
  • choisir « Modul » comme type
  • sélectionnez votre nom Modul

... pour créer une page d'affichage pour un élément individuel, les étapes sont presque les mêmes:

  • créer un lecteur-Modul
  • insérer ce lecteur-Modul sur une nouvelle page (dans un nouvel article)
  • dire la liste précédente créé-Modul où le lecteur-Modul est

espérons que cette aide :)