Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 01. September 2011 10:16

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.437

[GELÖST] Wie Werte aus URL in Variablen speichern

Konkretes Beispiel:

Ein Ergebnis von Search liefert mir unter Anderen diese URL:
index.php?mact=speisekarte,cntnt01,default,0&cntnt01what=gerichte&cntnt01alias=muschelsuppe&cntnt01returnid=56

Nun hätte ich gerne die fettgedruckten Werte extrahiert und in Variablen gespeichert um mein Modul mit diesen Parametern(what und alias) aufrufen zu können.

Eine regex könnte so aussehen:

(jaja, arg spartanisch...)

Dann hätte ich in $2 gerichte und in $4 muschelsuppe.

Aber wie könnte ich sowas in Smarty angehen?

Offline

#2 01. September 2011 10:31

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Mach einen UDT in welchem du die URL entsprechend auseinander nimmst. Mit $smarty->assign kannst du dann die Werte einer Smarty Variable zuweisen. Dann hast du diese Werte als Smarty Variablen zur Verfügung.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#3 01. September 2011 11:00

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

nockenfell schrieb:

Mach einen UDT in welchem du die URL entsprechend auseinander nimmst. Mit $smarty->assign kannst du dann die Werte einer Smarty Variable zuweisen. Dann hast du diese Werte als Smarty Variablen zur Verfügung.

Oh Oh - alle POST, GET und auch andere Dinge liegen bereits unter Smarty vor und müssen nicht nochmals zugewiesen werden und können nachfolgend verwendet werden.

Siehe auch http://www.smarty.net/docs/en/language. … smarty.tpl

Offline

#4 01. September 2011 11:02

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Musst du gar nicht - Smarty kennt diese Werte bereits wink

Check mal {$smarty.get.cntnt01what} und {$smarty.get.cntnt01alias}

http://www.smarty.net/docsv2/de/languag … smarty.tpl

Edit: Upps, da war doch jemand schneller ...

Offline

#5 01. September 2011 12:01

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

cyberman schrieb:

Musst du gar nicht - Smarty kennt diese Werte bereits wink

Check mal {$smarty.get.cntnt01what} und {$smarty.get.cntnt01alias}

http://www.smarty.net/docsv2/de/languag … smarty.tpl

Klar kann mit Smarty eine Get oder Post Variable direkt angesprochen werden. Nur sind diese immer cntnt01what? Wenn ja, würde ich es auch so machen, wenn nein und dieser Identifier ändern kann, bringt diese Art nichts.

PS: Das mit $smarty.get.cntnt01what} hatte ich zuerst geschrieben, dann aber aus oben stehenden Gründen verworfen.

Beitrag geändert von nockenfell (01. September 2011 12:02)


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#6 01. September 2011 13:05

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

nockenfell schrieb:

Nur sind diese immer cntnt01what? Wenn ja, würde ich es auch so machen, wenn nein und dieser Identifier ändern kann, bringt diese Art nichts.

Man muss immer wissen wie der Identifierer heißt wie will man ihn sonst einsetzen ?

Offline

#7 01. September 2011 13:15

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Die Modul ID wird zwar vom CMS, je nachdem wie das Modul gerade ausgegeben werden will, generiert, aber man weiß doch wie man das Modul aufruft. Mit "inline=false" (wenn also nur der Moduloutput ersetzt werden soll) kann diese ID auf jeder Seite anders sein.* Ansonsten, wenn die Ausgabe im Inhalt erfolgt (also im {content} Block) ist es immer cntnt01.

Das muss man für jede Anwendungsart anpassen. Eine allgemeine Lösung gibt es da meiner Meinung nach - zumindest rein mit Smarty-Mitteln - nicht. Wenn die Seite steht und sich das Layout (und somit auch die Modulreihenfolge) nicht mehr ändert, ist es ohnehin immer wieder die gleiche ID für jedes Modul. Egal wie es ausgegeben wird.

* weiß garnicht ob es diese Option beim Suchmodul überhaupt gibt


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#8 01. September 2011 13:26

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.437

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Moment mal... kleines Mißverständnis.

Ich befinde mich in der Resulttemplate des Search-Moduls, und zu dieser Zeit weiß ich noch nichts von $smarty.get.cntnt01what.
Erst wenn ich tatsächlich auf der Page mit der URL bin kann so auf diese Parameter zugreifen.

Es geht darum in der Resulttemplate mein Modul aufzurufen und eine gekürtzte Version des Items zu zeigen. So wie man über die Newsid auch einen Newseintarg anzeigen kann. Nur brauche ich eben den alias und das what(die Kategorie für den alias)

Nebenbei:
Die Parameter sind immer gleich! what= und alias=

Ich denke grade über ein Smartyplugin als Modifier nach.
Da ich in der Template nicht unbedingt die Einzelwerte brauche, sondern den Modulaufruf.

Offline

#9 01. September 2011 13:31

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Das Resulttemplate wird doch auf der Seite angezeigt, nachdem die Suchaktion ausgeführt wurde. D.h. die Get/Post-Parameter sind dann in jedem Fall auch im Resulttemplate verfügbar.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#10 01. September 2011 13:53

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.437

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

NaN schrieb:

Das Resulttemplate wird doch auf der Seite angezeigt, nachdem die Suchaktion ausgeführt wurde. D.h. die Get/Post-Parameter sind dann in jedem Fall auch im Resulttemplate verfügbar.

Da steh ich jetzt echt auf'm Schlauch ... oder der Leitung.
Mit {$smarty.get.cntnt01what} bekomme ich in der resulttemplate keine Ausgabe. Auf der Trefferseite dann aber schon.

...muss ich mir heut abend nochmal zu Gemüte führen...

Offline

#11 01. September 2011 14:31

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Klenkes schrieb:

Mit {$smarty.get.cntnt01what} bekomme ich in der resulttemplate keine Ausgabe. Auf der Trefferseite dann aber schon.

Die Suchergebnisse werden weder über get noch post sichtbar, das wird intern abgehandelt und an Smarty zugewiesen, deshlab kannst du auch nichts sehen.

Und im gesamten Ergebnis des normalen Modules gibt es weder what  noch alias.

Offline

#12 01. September 2011 19:49

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.437

Re: [GELÖST] Wie Werte aus URL in Variablen speichern

Ich hab mir nun ein erstes Smartyplugin geschrieben, welches prima funktioniert.
Da meine vom Searchmodul zum Hit generierte $entry->url immer gleich aufgebaut ist, habe ich das erstmal eher statisch umgesetzt, werde es aber noch flexibler machen.

Das Plugin: (modifier.modulecall.php)

function smarty_modifier_modulecall($string)
{
  preg_match('/(what=)(\w+).*(alias=)(\w+)/i',$string, $split_array);

  $output .= "{cms_module module='speisekarte' what='" . $split_array[2] . "' alias='" . $split_array[4] . "' template=search}";

  return $output;
}

Wäre ich in PHP doch nicht immer krank gewesen...  lol

Und rufe es in der resulttemplate so auf:

<ul>
{foreach from=$results item=entry}
 {if $entry->module eq "speisekarte"}
 <li>{eval var=$entry->url|modulecall}</li>
 {else}
 <li>{$entry->title} - <a href="{$entry->url}">{$entry->urltxt}</a> ({$entry->weight}%)</li>
 {/if}
{/foreach}
</ul>

Müsste doch resourcenschonender sein als ein UDT? Wird nur geladen, wenn benötigt?

Offline