Moin und guten Tag
Ich habe hier mal Grundsätzliche Fragen zur Modulentwicklung. Nach gefühlten 30 tausend Seiten und kein weiterkommen, hoffe ich das man hier mal, was Grundsätzliches klären kann.
So nun zur eigentlichen Sache. Wenn man im Backend Datenbankinhalte anzeigen will, wehrt sich Oxid mit allen zur Verfügung stehenden Mitteln, diese Inhalte auch anzuzeigen.
Dafür muss, so wie ich es verstanden habe, eine Anweisung her, das Oxid an der gewünschten Stelle, diesen Inhalt auch anzeigen darf. Dafür muss es dann drei Dateien geben.
- Die metadata.php
- Eine .tpl Datei (Hier sind es drei)
- Eine .php Datei.
Da man ohne Beispiel was man will schlecht Fragen klären kann, habe ich mal ein kleines Projekt vorbereitet das in der Artikelansicht die zu den Artikel gehörigen tags als Liste anzeigt. Ist ja nicht ganz uneigennützig. Aber ich denke das dies wohl zu gebrauchen ist und das dadurch grundsätzliche Fragen geklärt werden.
Die metadata.php
<?php
/**
* Module information
* Das Modul erweitert die Admin Artikelansicht um ein weiteres Feld.
* Dort sollen die Tags oder auch Stichworte zu den dazugehörigen Artikel angezeigt werden.
* Die Tags sind in der Tabelle "oxartextends" unter dem Feld "oxtags" zu finden.
* oxartextends__oxtags
*/
$aModule = array(
'id' => 'mbm',
'title' => 'Mein Backend Modul',
'description' => array(
'de' => 'Ich lasse mal diese ganzen Einträge leer, weil die zur Funktion nicht relevant sind.',
'en' => ''
),
'thumbnail' => '',
'version' => '',
'author' => '',
'email' => '',
'url' => '',
'extend' => array(
'article_list' => 'mein_modul/mein_modul_title/controllers/article_list'
),
'blocks' => array(
array('template' => 'article_list.tpl', 'block'=>'admin_article_list_colgroup', 'file'=>'mbm_article_list_colgroup.tpl'),
array('template' => 'article_list.tpl', 'block'=>'admin_article_list_sorting', 'file'=>'mbm_article_list_sorting.tpl'),
array('template' => 'article_list.tpl', 'block'=>'admin_article_list_item', 'file'=>'mbm_article_list.tpl'),
)
);
Dazu natürlich die .tpl Dateien. Es sind hier drei weil einzelne Blöcke bearbeitet werden müssen. Eine bessere Lösung kenn ich nicht. Erst einmal habe ich die artikel_list.tpl aus dem Standart application/views/admin/tpl Ordner genommen. Dort sind die drei Blöcke die ersetzt werden. In rot ist hinzugefügt worden.
- [{block name=“admin_article_list_colgroup”}]
<col width="3%">
<col width="10%">
<col width="25%">
<col width="30%">
<col width="30%">
<col width="2%">
- [{block name=“admin_article_list_sorting”}] Obwohl ich dies nicht hinbekomme
<td class="listheader first" height="15" width="30" align="center"><a href="Javascript:top.oxid.admin.setSorting( document.search, 'oxarticles', 'oxactive', 'asc');document.search.submit();" class="listheader">[{ oxmultilang ident="GENERAL_ACTIVTITLE" }]</a></td>
<td class="listheader"><a href="Javascript:top.oxid.admin.setSorting( document.search, 'oxarticles', 'oxartnum', 'asc');document.search.submit();" class="listheader">[{ oxmultilang ident="GENERAL_ARTNUM" }]</a></td>
<td class="listheader" height="15"> <a href="Javascript:top.oxid.admin.setSorting( document.search, 'oxarticles', '[{ $pwrsearchfld|oxlower }]', 'asc');document.search.submit();" class="listheader">[{assign var="ident" value=GENERAL_ARTICLE_$pwrsearchfld }][{assign var="ident" value=$ident|oxupper }][{ oxmultilang ident=$ident }]</a></td>
<td class="listheader" ><a href="Javascript:top.oxid.admin.setSorting( document.search, 'oxarticles', 'oxshortdesc', 'asc');document.search.submit();" class="listheader">[{ oxmultilang ident="GENERAL_SHORTDESC" }]</a></td>
<td class="listheader" colspan="2"><a href="Javascript:top.oxid.admin.setSorting( document.search, 'oxarticles', 'oxtags', 'asc');document.search.submit();" class="listheader">[{ oxmultilang ident="GENERAL_TAG" }]TAG</a></td>
</code>
3. [{block name="admin_article_list_item"}]
<code>
[{ if $listitem->blacklist == 1}]
[{assign var="listclass" value=listitem3 }]
[{ else}]
[{assign var="listclass" value=listitem$blWhite }]
[{ /if}]
[{ if $listitem->oxarticles__oxid->value == $oxid }]
[{assign var="listclass" value=listitem5 }]
[{ /if}]
<td valign="top" class="[{ $listclass}][{ if $listitem->oxarticles__oxactive->value == 1}] active[{/if}]" height="15"><div class="listitemfloating"> </a></div></td>
<td valign="top" class="[{ $listclass}]"><div class="listitemfloating"><a href="Javascript:top.oxid.admin.editThis('[{ $listitem->oxarticles__oxid->value }]');" class="[{ $listclass}]">[{ $listitem->oxarticles__oxartnum->value }]</a></div></td>
<td valign="top" class="[{ $listclass}]" height="15"><div class="listitemfloating"> <a href="Javascript:top.oxid.admin.editThis('[{ $listitem->oxarticles__oxid->value }]');" class="[{ $listclass}]">[{ $listitem->pwrsearchval|oxtruncate:200:"..":false }]</a></div></td>
<td valign="top" class="[{ $listclass}]"><div class="listitemfloating"><a href="Javascript:top.oxid.admin.editThis('[{ $listitem->oxarticles__oxid->value }]');" class="[{ $listclass}]">[{ $listitem->oxarticles__oxshortdesc->value|strip_tags|oxtruncate:45:"..":true }]</a></div></td>
<td valign="top" class="[{ $listclass}]"><div class="listitemfloating"><a href="Javascript:top.oxid.admin.editThis('[{ $listitem->oxarticles__oxid->value }]');" class="[{ $listclass}]">[{ $listitem->oxartextends__oxtags->value|strip_tags|oxtruncate:45:"..":true }]</a></div></td>
<td class="[{ $listclass}]">
[{if !$readonly}]
<a href="Javascript:top.oxid.admin.deleteThis('[{ $listitem->oxarticles__oxid->value }]');" class="delete" id="del.[{$_cnt}]"title="" [{include file="help.tpl" helpid=item_delete}]></a>
[{/if}]
</td>
Diese Block Namen sind auch in der metadata.php wiederzufinden.
Dann wird wohl noch die .php Datei zur Anweisung das auch an der gewünschten Stell die Daten angezeigt werden sollen.
Die wird hier article_list.php genannt. Und liegt im Ordner mein_modul/mein_modul_title/controllers/article_list.php
Und das ist der Knackpunkt. Was genau muss da stehen, damit Datenbankinhalte angezeigt werden können? Die Inhalte sind unter oxartextends__oxtags zu finden.
Es wäre schön wenn man hier eine saubere Lösung findet, die man so oder so ähnlich, in abgewandelter Form, auch für andere Projekte die Inhalte für das Backend anzeigen sollen.