Content_Dump in einem Modul nutzen?

Hilfe zu Modulen und Tags
Post Reply
schelle
Forum Members
Forum Members
Posts: 13
Joined: Wed Jan 21, 2009 10:53 pm

Content_Dump in einem Modul nutzen?

Post by schelle »

hallo gemeinde, ich habe ein Modul (Preisliste) mit dem CAT-like ModuleMaker erstellt
Eine funktion zum sortieren ist darin nicht vorgesehen.
Das Modul rufe ich direkt im content einer seite auf ({cms_module module='preisliste' nbperpage='15'})


die tabelle im template: {foreach from=$itemlist item="item"}

| {$item->name} |
| {$item->preis} Euro |
| {$item->breite} m |
| {$item->tiefe} m |
| {$item->hoehe} m |
| {$item->gewicht} Kg |
| {$item->kategorie} |


Jetzt möchte ich aber die tabelle zB in der "kategorie" sortieren und habe noch keinen weg gefunden, wie ich das mit Content_Dump
machen könnte.

Kann mir jemand auf die sprünge helfen, oder hat jemand ein vergleichbares anliegen gelöst?
- die contentausgabe eines moduls und dann mit Content_Dump sortieren?

Danke

schelle
cyberman

Re: Content_Dump in einem Modul nutzen?

Post by cyberman »

Hast du die Anleitung zu content_dump im Wiki gelesen?
nhaack

Re: Content_Dump in einem Modul nutzen?

Post by nhaack »

Hallo Schelle,

Content_Dump (CD) kann nur direkt auf die normale Content-Tabellen in der Datenbank zurückgreifen. CD kann keine Daten als solche von einer anderen Funktion entgegen nehmen und verarbeiten. Das Ziel von CD ist einen nach eigenen Wünschen strukturierten Dump des Contents aus der regulären Content-Tabelle der DB zu erzeugen.

Man kann auch die Waren- bzw Artikelverwaltung begrenzt mit CD lösen.

Du baust dir die Abfrage mit Content-Dump zurecht und verzichtest auf CAT-like ModuleMaker. Du würdest also Content-Templates mit genügen Content-Blöcken für die Artikel erstellen (hier bietet sich der Parameter online="true" beim Content-Block Aufruf im Template an). Mit CD liest du die jeweiligen Felder aus, dann kannst du auch auf verschiedene Art und Weise sortieren.

Wikiseite: http://wiki.cmsmadesimple.org/index.php ... ntent_dump

Das ganze ist manchmal etwas tricky aber machbar und funktioniert sehr solide. CD ist für mich ein Standard Tool bei der Siteerstellung  ;D.

Kurzes Beispiel:

Artikel Template:

Code: Select all


<__html>
{content block="preis" oneline=true}
{content block="bestellnummer" oneline=true}
{content block="kategorie" oneline=true}
{content block="beschreibung" wysiwyg=false}
</__html>

Vereinfachter Content Dump Aufruf und Darstellung:

Code: Select all


{content_dump start_id=$content_id extensions="beschreibung,bestellnummer,preis,kategorie"}
{foreach from=$dump item="item"}
{$item->extensions->bestellnummer->data}
{$item->extensions->beschreibung->data}
{$item->extensions->kategorie->data}
{$item->extensions->preis->data}
{foreach}

Allerdings kann CD nicht nach einer Extension sortieren. Jetzt wärest du quasi genau so weit wie mit dem CAT-like Modulemaker, nur dass du nur das CD Plugin verwendet hast und die Inhalte im normalen Content-Baum pflegen kannst.

Um jetzt die Daten entspreched sortieren zu können, wirst du nciht um etwas Smarty und ein kleines Plug-In, bzw. User Defined Tag. Du ergibst also dein $itemlist an eine Funktion und erhälst eine entsprechend sortierte Liste zurück.

Jetzt hast du aber ein Array an Classen, das kann man nicht direkt mit einem Befehl sortieren. Du musst dir also eine kleine Vergleichsfunktion für deine Datenstruktur bauen. Das sieht dann in etwa so aus (und ist weniger Kompliziert als es aussieht):

Zum Sortieren deiner Datenstruktur:
Plugin: "sort_itemlist_kategorie"

Code: Select all


function cmp_obj($a, $b){
        $al = strtolower($a->kategorie);
        $bl = strtolower($b->kategorie);
		
        if ($al == $bl) {
            return 0;
        }
		
        return ($al > $bl) ? +1 : -1;

}

$data = $params['data'];
usort($data , "cmp_obj");
$smarty->assign('sorted', $data);

Zum Sortieren von Content-Dump

Code: Select all


function cmp_obj($a, $b){
        $al = strtolower($a->extensions->kategorie->data);
        $bl = strtolower($b->extensions->kategorie->data);
		
        if ($al == $bl) {
            return 0;
        }
		
        return ($al > $bl) ? +1 : -1;

}

$data = $params['data'];
usort($data , "cmp_obj");
$smarty->assign('sorted', $data);


In deinem Template kannst du jetzt folgendes machen:

Code: Select all


{cms_module module='preisliste' nbperpage='15'}

{sort_itemlist_kategorie $data=$itemlist}

{foreach from=$sorted item="item"}

   <div class="grid2">| {$item->name} |</div>
   <div class="grid3">| {$item->preis} Euro |</div>
   <div class="grid4a">| {$item->breite} m |</div>
   <div class="grid4b">| {$item->tiefe} m |</div>
   <div class="grid4c">| {$item->hoehe} m |</div>
   <div class="grid5">| {$item->gewicht} Kg |</div>
   <div class="grid6">| {$item->kategorie} |</div>

{/foreach}

Müsste eigentlich so klappen, hab's jetzt nicht getestet. Wobei cih mich gerade Frage ob das Modul nicht eigentlich eine Sortier-Funktion haben?

Beste Grüße
Nils
Post Reply

Return to “Module und Tags”