Content Dump Plug-In

Hilfe zu Modulen und Tags
Post Reply
nhaack

Content Dump Plug-In

Post by nhaack »

Nun denn,

ein erster Wurf ist getätigt ;D. Leider ist meine Forge Projektanfrage noch nicht bestätigt worden (ja, irgendwann sollen die Jungs ja auch ein Privatleben führen dürfen), daher für alle, die das Plugin im Vorwege mal ausprobieren wollen, einfach mal den Anhang runterladen. Dann die .txt Endung löschen und als "function.content_dump.php" in das Plugin Verzeichnis einspielen.

Mit dem Content Dump Plug-In lassen sich auf vielfältige Weise Sammlungen des gesamten Site-Inhalts erstellen. Wer hat wann welche Seiten bearbeitet/erstellt? Welche Inhalte gibt es in einem Site-Bereich? Textauszüge für Übersetzungsaufträge? ...

Funktionsumfang:

#Gesammelten Site-Content in einer Seite ausgeben
#Inhalt eines Site-Bereichs ausgeben, z.B. Produkte oder Projekte (nach ID)
#Ausgegebene Inhalte sortieren (nach ID, Hierarchy, Datum, Änderung, Besitzer, etc... auf- und absteigend)
#Nach einem zweiten Parameter sortieren
#Bestimmte Content Blöcke ausgeben
#Seiten ausschließen (per ID Liste)

Per Smarty ließen sich optional noch weitere Informationen filtern:

#Nur aktive oder nicht aktive Seiten
#Nur im Menu angezeigt oder versteckte Seiten
#Nur Beiträge eines bestimmten Users oder Datums
#Anzahl der ausgegebenen Einträge begrenzen

Mit Hilfe des Content-Type hacks (http://forum.cmsmadesimple.org/index.ph ... 190.0.html) ließ sich mit dem Dump Tag sogar ein echter RSS Feed der Site bauen (wenn auch z.Z. nur mit einer Kategorien). Ein Beispiel-Template hierfür:

Code: Select all

<?xml version="1.0"?>
	<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
		<channel>
			<atom:link href="FEED URL HERE" rel="self" type="application/rss+xml" />
			<title>FEED TITLE HERE</title>
			<link>FEED URL HERE</link>
			<description>FEED DESCRIPTION HERE</description>
			<language>en-us</language>
			<copyright>COPYRIGHT INFO HERE</copyright>
			<generator>Content Dump plug-in (by nhaack) for CMS Made Simple</generator>

	{content_dump dateformat='%a, %d %b %Y %T -0200'}

	{foreach from=$dump item=dump} 
		<item>
			<pubDate>{$dump->created->date}</pubDate>
			<title><![CDATA[ {$dump->title} ]]></title>
			<category>CATEGORY TITLE</category>
			<link>http://domain.com/{$dump->alias}.htm</link>
			<guid>http://domain.com/{$dump->alias}.htm</guid>
			<description><![CDATA[ {$dump->content} ]]></description>
		</item>
	{/foreach}

  </channel>

</rss>
Mit besserer Smarty-Logik kann man das ganze natürlich noch ein wenig fine-tunen (z.B. nur 10 neueste Beiträge). Es lassen sich also sehr vielseite Abfragen durch die Kombination der optionalen Parameter mit Smarty erstellen.  Die verfügbaren Parameter und Optionen werden auf der Hilfe-Seite angezeigt und erklärt (mit Beispielen).

Noch ein Hinweis: Dies ist die erste Version des Plug-ins, Bugs können also auftreten (wie heißt es so schön "Lokal läufts"). Über Tests und Feedback würde ich mich sehr freuen.

Habe das Plugin bis jetzt nur auf 'ner Testseite mit etwa 40 Seiten getestet, die Geschwindigkeit war ok (etwa 0,01 Sekunden pro Artikel incl. reg. CMS Zeiten, also 0,4 sek. für die Anzeige-Seite). Postet bitte eure Einsatzfälle, würde mich mal interessieren wofür das Plug-in alles eigesetzt wird.

Nils
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

Last edited by nhaack on Sat Sep 20, 2008 5:27 am, edited 1 time in total.
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Content Dump Plug-In

Post by jeff1980 »

Hi Niels,

Daumen hoch - das ging schnell!

Hab das Plugin natürlich sofort ausprobiert und grundsätzlich funktioniert es auch bei unserer (doch sehr umfangreichen Seite) sehr schnell.
Allerdings habe ich noch Probleme, die Parameter anzusprechen. Bis jetzt gibt das PlugIn die Seite immer in der gleichen Reihenfolge aus (nach ID bzw. Erstellungsdatum).

Habe den Tag so in eine Seite eingebunden:

Code: Select all

{content_dump first_sort="title" first_sort_order="up"}

{foreach from=$dump item=dump}

<h1>{$dump->title}</h1>
{$dump->content}<br />
{$dump->created->date}<br />
{$dump->created->by->last_name}, {$dump->created->by->first_name}<br /><br />

{/foreach} 
Hier mal der Link zum Ergebnis: http://www.festtagsgedichte.de/dump.htm.
Hab es auch ohne "first_sort_order" probiert - gleicher Effekt.
Wenn Du noch weitere Infos brauchst, sag einfach Bescheid.
Werd es aber nachher auch noch mal auf anderen Seiten testen (muss nur leider jetzt weg...).

Trotz allem - ein echt vielversprechendes Werkzeug. Schweizer Messer trifft es schon sehr gut  ;).

Viele Grüße
Jan
nhaack

Re: Content Dump Plug-In

Post by nhaack »

uups... irgendwie hat sich da dann doch ein kleiner Logik-Fehler eingeschlichen. Ein Update des Tags hangt unten dran, jetzt müsste es klappen.

Wenn du als Sortier-Richtung "up" verwenden möchtest, brauchst du es nciht explizit anzugeben, da als Standard von A->Z (oder 1->n) sortiert wird.

Code: Select all

{content_dump first_sort="title"}
müsste also reichen, zum Umkehren dann aber mit Parameter verwenden.

Code: Select all

{content_dump first_sort="title" first_sort_order="down"}
:)

Beste Grüße
Nils
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

Last edited by nhaack on Sat Sep 20, 2008 1:50 pm, edited 1 time in total.
NaN

Re: Content Dump Plug-In

Post by NaN »

Nicht schlecht. Das ging wirklich schnell.
Schau mir gerade mal den Quellcode an.
Nur ein paar kleine (programmiertechnische) Fragen:

Seit wann erkennt der php Interpreter denn sowas:

Code: Select all

$dbuserrow[user_id];
oder sowas:

Code: Select all

$smarty->assign(dump, $content_dump);

sollte das nicht eigentlich so geschrieben werden?

Code: Select all

$dbuserrow['user_id'];
bzw.

Code: Select all

$smarty->assign('dump', $content_dump);
(nur aus Interesse, bin verwirrt)


Und wieso zwei Datenbankabfragen?
Ließe sich das nicht auch mit einer einzigen bewerkstelligen? (Tabellen verknüpfen usw.)

Ist es Absicht, dass smarty-Tags im Content nicht kompiliert werden?
Könnte man das evtl. auch noch mit einem Parameter einbauen (on/of)?

Wieso lässt Du nicth schon die Datenbank das Sortieren und Filtern übernehmen?

Insgesamt ein wirklich hübsches Plugin.
Muss gerade irgendwie an die "drucken"-Funktion des Newsmoduls denken.
Da bekommt man ja auch den reinen Inhalt allerdings nur eines einzelnen Artikels.
Mit Deinem Plugin könnte man sich quasi jetzt auch jeden Inhalt einer Seite als reine Text-/Printversion ausgeben lassen.
Man müsste allerdings immer eine extra Seite mit dem Plugin dazu erstellen...
nhaack

Re: Content Dump Plug-In

Post by nhaack »

Hi NaN,

Was die Schreebweise angeht hast du glaube ich recht. War gestern ein büschen spät, da der Interpreter es geschluckt hat bin ich nicht drüber gestolpert (bin nur ungelernter Hobby Entwickler).

Zu deinen Fragen:

Das mit den Usern und dem Content in einer Abfrage ist so eine Sache. Ich weiß nicht genau wie man mehr als zwei Tabellen "Joint". Um an den Content zu gelangen mache ich bereits einen Join zwischen den Tabellen prefix_content und prefix_content_props bei denen die ID's übereinstimmen. Jetzt müsste ich eine Abfrage bauen, mit der ich dieses Ergebnis (alle Contents) noch mit den Userdaten für Besitzer und Letzter Bearbeiter zusammenbringe. Da erschien mir der Umweg über eine weitere recht kleine Abfrage mit späterem Matching einfacher. Hast du vielleicht einen Tipp wie ich die Userdaten mit in ein Ergebniss bekomme?

Die Sortierung findet übrigens mit der Datenbank-Anfrage statt. Die Funktion "sql_sort_param" hilft lediglich den Query-String aufzubauen, wirklich sortieren tut sie nicht.

Das mit dem fehlenden interpretieren von Smarty ärgert mich gerade auch ein wenig (nicht besonders hübsch). Ich werde mir mal anschauen, wie man die DB Ergebnisse zusätzlich kompilieren kann. Wobei ich mich Frage, wie sich dies performance-seitig auswirkt. Ich denke darüber nach, alternativ evtl. Smarty Tags im Content komplett rauszufiltern, damit zumindest nicht der Tag voll ausgeschrieben sichtbar ist.

Danke für's Feedback
Nils
NaN

Re: Content Dump Plug-In

Post by NaN »

nhaack wrote: [...]
(bin nur ungelernter Hobby Entwickler)
[...]
Sind wir doch alle  ;)
(Ich glaube, ich bin da bisher noch inoffizieller ungeschlagener Weltmeister in Buchstabendrehern, Klammern vergessen und fehlender Doku ;D )
nhaack wrote: Hast du vielleicht einen Tipp wie ich die Userdaten mit in ein Ergebniss bekomme?
Mal schaun.

nhaack wrote: Das mit dem fehlenden interpretieren von Smarty ärgert mich gerade auch ein wenig (nicht besonders hübsch). Ich werde mir mal anschauen, wie man die DB Ergebnisse zusätzlich kompilieren kann.
In der Modul API gibt es dazu eine Funktion namens ProcessTemplate($content); .
Weiß aber nicht, ob und wie man da von einem Plugin aus rankommt.

nhaack wrote: Wobei ich mich Frage, wie sich dies performance-seitig auswirkt.
Das könnte in der Tat bei vielen Seiten ein Problem werden.
Daher meine Frage: Was macht der Dump (der ja ursprünglich nicht für reguläre Seitenbesucher gedacht war, oder?) in einem Plugin fürs Frontend? Wäre da ein Modul fürs Backend nicht praktischer?
Da könnte man dann AJAX einsetzen um Timeouts zu verhindern.
(es sei denn ich will das Plugin als "Printfunktion" o.ä. nutzen)

nhaack wrote: Ich denke darüber nach, alternativ evtl. Smarty Tags im Content komplett rauszufiltern, damit zumindest nicht der Tag voll ausgeschrieben sichtbar ist.
Dazu fällt mir nur RegExp ein.
Ist auch nicht unbedingt positiv für die Performance aber zumindest auch eine Lösung.

nhaack wrote: Danke für's Feedback
Keine Ursache.
nhaack

Re: Content Dump Plug-In

Post by nhaack »

Hab's gerade mal probiert, mit einem kleinen Trick kannst du dir ein Print Template erstellen, wobei noch alle unterhalb liegenden Seiten zumindest als Variabeln übergeben werden, sie werden also nicht übersprungen. Ich müsste noch einen "einzelne Seite" Parameter hinzufügen.

Dein Print-Template mit Parameter für eine einzelne Seite könnte wie folgt aussehen (Template Code):

Code: Select all

{process_pagedata}

<__html>

   ...

   {capture assign="printpage"}
      {$smarty.get.printid}
   {/capture}
   
   {content_dump start_id="$printpage"}

   {$dump[0]->title}
   {$dump[0]->content}

   ...

</__html>
Als nächstest würdest du dann eine Druck-Seite zum Ansprechen anlegen. Z.B. als Seite mit dem Alias "print", erstellt mit dem eben erzeugten Drucktemplate.

Nun kannst du einen Button in deine Site einbauen, der wie wie folgt funktionieren kann (Aufruf der Druck Seite mit Parameter für das Content-Dump Plug-In):

Code: Select all

<a href="index.php?page=print&pageid={$content_id}">print</a>
Voilá, fertig ist die Druckansicht für jede einzelne Seite :) (also eine Druck_Seite /-Fuktion für alle Seiten)

Ich könnte mir vorstellen, das man die Content ID auch direkt beziehen kann, komme nur gerade nicht drauf wie es geht.
//edit: wird jetzt direkt genutzt //
Was macht der Dump (der ja ursprünglich nicht für reguläre Seitenbesucher gedacht war, oder?) in einem Plugin fürs Frontend? Wäre da ein Modul fürs Backend nicht praktischer?
Ja, warum als FrontEnd Plugin... zum einen fehlt mir noch mehr Überblick wie man Module programmiert und zum anderen war es ursprünglich auch nur als schnelle "dump-Lösung" zwischendurch gedacht. Nur jetzt wo ich festgestellt habe, dass man damit prima Drucktemplates oder RSS Feeds bauen kann oder auch prima Index-Seiten bauen könnte und als Admin auch Vorteile von einem Modul hätte... hach...

Nächstes Wochende überlege ich mir mal, wie man da vielleicht mal ein Modul daraus machen könnte. Es gibt da ja dieses Skeleton Modul... für den Anfang sollte das ja reichen. Kann jemand hier ein gutes Tutorial empfehlen?
In der Modul API gibt es dazu eine Funktion namens ProcessTemplate($content); .
Weiß aber nicht, ob und wie man da von einem Plugin aus rankommt.
Das wäre doch gar nicht so schlecht, wenn man wie du vorgeschlagen hast die Kompilierung wahlweise an- oder ausschalten kann. Wenn die Maschine auf der die Site läuft das nicht mitmacht, kann man das Kompilieren auschalten und die Smarty Tags werden rausgefiltert.

Beste Grüße
Nils
Last edited by nhaack on Sat Sep 20, 2008 3:56 pm, edited 1 time in total.
NaN

Re: Content Dump Plug-In

Post by NaN »

nhaack wrote: Ich könnte mir vorstellen, das man die Content ID auch direkt beziehen kann, komme nur gerade nicht drauf wie es geht.
Wie wärs einfach nur mit {$content_id} ?
nhaack

Re: Content Dump Plug-In

Post by nhaack »

äähh... na klar... puhh... so offensichtlich, dass es schmerzt. Pase gleich mal oben das Beispiel an.

Beste Grüße
Nils
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Content Dump Plug-In

Post by jeff1980 »

Hi Nils,

sehr genial. Es funzt und es macht richtig Laune, mit dem PlugIn zu arbeiten. Die Sortierfunktion ist echt so was von nützlich, dass es mich fast wundert, wie all die User von CMSms bisher ohne ausgekommen sind.

Bin sehr, sehr gespannt, wie es mit dem PlugIn weiter geht.

Dankbare Grüße
Jan
nhaack

Re: Content Dump Plug-In

Post by nhaack »

Sopp,

einen kleinen hab ich noch. Ich habe eine Version 0.2 nachgelegt die über drei weitere Parameter verfügt:

#this_only um die Ausgabe auf einen bestimmten Eintrag zu begrenzen

Code: Select all

{content_dump this_only="16"}
#limit_start um die Startposition für die Ausgabe festzulegen (ab/inkl. Startnummer, z.B. 10 für den zehnten Beitrag)

Code: Select all

{content_dump limit_start=10}
#limit_count um die Anzahl der ab limit_start gezeigten Einräge festzulegen (z.B. 25 Einträge)

Code: Select all

{content_dump limit_count=25}
Die 25 aktuellsten Beiträge bekomme ich nun also so:

Code: Select all

{content_dump limit_count=25 first_sort="modified" first_sort_order="down"}
Zudem besteht jetzt die auch Möglichkeit nach "alias" (techn. Seitenname) zu sortieren

Code: Select all

{content_dump first_sort="alias"}

Frohes Testen
Nils
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

nhaack

Re: Content Dump Plug-In

Post by nhaack »

Hallo zusammen,

nun ist es geschafft. Im Development Bereich hat der Content Dump Tag nun ein eigenes Projekt  8).

Der Tag liegt jetzt in einer Version 0.3 vor und kann nun zusätzlich bei Bedarf Informationen zu den Eltern-Seiten liefern, Smarty compilieren, entfernen oder anzeigen. Zudem ist es möglich nach ACTIVE und SHOW_IN_MENU direkt über den Tag zu filtern.

Die Userdaten werden nun optional angefordert. Werden die User-Informationen genutzt, muss der Parameter user="true" angehängt werden.

Projekt: http://dev.cmsmadesimple.org/projects/contentdump/
Englisches Forum: http://forum.cmsmadesimple.org/index.php/topic,26055.0.html

Unter den Release-Files befindet sich auch ein Bundle mit einem PDF, dass alles sehr umfangreich erklärt. Die nächsten tage wandert die Info dann in das Wiki. Die meisten infos sind aber auch in der Hilfe untergebracht.

Lasst mich wissen wie es bei euch funktioniert :).

Beste Grüße
Nils
Post Reply

Return to “Module und Tags”