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

#1 30. April 2013 17:06

bd0
Server-Pate
Ort: Köln
Registriert: 22. Juni 2011
Beiträge: 185

[GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Hallo allerseits,

Ich habe eine Seite die bislang nur in deutsch existierte und nun um englisch erweitert wurde.
Ich nutze:
CMS-Version: 1.9.4.1
content dump: 0.8.2
MleCMS: 1.10.5

Die Seitenstruktur ist folgendermaßen:

1 deutsch
    1.1 Neues
    1.2 Alle Artikel
    1.3 Artikel
        1.3.1 Produkt1
        1.3.2 Produkt2
        1.3.3 Produkt3
        ...
        ...
    1.4 Über Mich

2. english
    2.1 New
    2.2 All Articles
    2.3 Articles
    2.4 About
   
Unter 1.3 Artikel liegen einzelne Artikelseiten 1.3.1, 1.3.2, usw. die Porduktbeschreibungen und Fotos enthalten.

Die Kurzansichten "1.1 Neues" und "1.2 Alle Artikel" werden über das Plugin ContentDump erzeugt indem die Seiten unterhalb von "1.3 Artikel" eingelesen werden und dann über eine {foreach from=$dump item=one_item} Scheife ausgegeben werden.
Bei "1.1 Neues" werden nur die 10 neuesten Artikel ausgegeben bei "1.2 Alle Artikel" entsprechend alle.
Aus den Listenansichten führt ein Link auf die entsprechende Produktseite z.b. 1.3.2
Das funktioniert soweit anstandslos.
Die Seite musste nun wie gesagt um eine zweite Sprache erweitert werden, dafür habe ich MleCms 1.10.5 genutzt.
Die Produktseiten habe ich um weitere Contentblöcke für die englischen Texte ergänzt, so dass man zusätzlich den englischen Titel und Beschreibungstext eingeben kann. Die Idee ist dass man NICHT jedes Produkt ein zweites mal komplett anlegen muss. Es sind mittlerweile sehr viele geworden.
Für die Listenansichten die mit ContentDump erzeugt werden ist das problemlos, da ich dort einfach die englischen Titel und Kurzbeschreibungen anzeigen lassen kann. Bei Klick auf Details landet man aber nach wie vor auf der deutschen Produktdetailseite z.b. 1.3.2. da es ja keine seperate englische Seite gibt.

MleCMS stellt die variable $lang_parent bereit die in meinem Fall entweder "de" oder "en" enthält. Damit liesse sich die Ausgabe steuern, da die Produktdetailseiten aber im deutschen Seitenzweig liegen ist dort $lang_parent natürlich "de".
Nun die Frage ist es möglich diese Variable so zu verändern dass das System denkt es wäre "en", wenn man aus einer der englischen Listenansichten (z.b. 2.1) auf diese Detailseite verlinkt?

Oder gibts eine andere Möglichkeit im Zusammenspiel mit ContentDump englische Detailseiten zu erzeugen?
Ich stelle es mir so vor. Ich lege unter 2.3.1 eine Seite an in der ContentDump gezielt die entsprechende Produktseite ausliest und die englischen Inhalte ausgibt. Nur weiß ich nicht wie man bei Klick auf den Details-Link der englischen Listenansicht den Wert für z.b. das pagealias der Ursprungsseite so an ContentDump weitergibt dass es nur diesen Artikel einliest bzw. ausgibt. Der Link würde dann auch 2.3.1 zeigen und noch als Wert das page-alias mitgeben, ContentDump müsste das dann entsprechend verarbeiten.

Würde ich das heute neu machen würde ich es gleich mit ListIt oder Products machen. Damit wäre es einfach über das Detailtemplate steuerbar.

Ich hoffe das Problem ist einigermaßen verständlich beschrieben. Würde mich sehr über Hilfe freuen.

Beitrag geändert von bd0 (30. April 2013 17:06)

Offline

#2 01. Mai 2013 22:13

nhaack
Server-Pate
Ort: Bonn
Registriert: 12. Dezember 2010
Beiträge: 171
Webseite

Re: [GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Ich bin mir nicht sicher ob ich's richtig verstanden habe.

Du wärest bereit für das englische Pendent durchaus eine dedizierte Seite anzulegen (also z.B. 2.3.1 für das gleiche Produkt unter 1.3.1). Die Produktinfos sollen aber auf einer einzelnen Seite gepflegt werden. Also das du im Grunde nur den Verweis in den englischen Baum hängst und dann füllt sich die Seite von alleine. Das Auslesen und Querverlinken bekommst du bereits hin.

Der Fall ist jetzt folgender:

Auf der Seite 2.1 wird nun eine Liste erzeugt, der dort bekannte Alias, ist aber der von Seite 1.3.1 (weil Inhalt ja von da gezogen) und nicht 2.3.1 (den du eigentlich für eine bräuchtest)?

Da gibt es verschiedene Ansätze für. Am "korrektesten" wäre sicherlich das mit ein paar eigenen Zeilen Code zu überbrücken. Hierarchie-Position der deutschen Seite abfragen (z.B. "0001.0003.0001"), auf englische Hierarchie-Position anpassen (z.B. "0001.0003.0002"), dafür den Alias abfragen.

Da wir aber bereits beim kreativen Einsatz von Content-Dump sind, könntest auf der Seite 2.1 das Template noch weiter anpassen. Folgende Voraussetzung: deine Hierarchie-Positionen der Artikel sind immer gleich!

Eine Abfrage läuft über den "deutschen Strang" und holt den Content. Eine läuft über den englischen Strang und holt sich die Aliase der englischen Seiten. Beide Abfragen laufen also mit den gleichen Parametern und liefern im Grunde jeweils die gleichen Ergebnisse. Der eine halt mit den englischen Feldern und der andere aus den Aliasen des anderen Seitenbaumes.

Wenn du durch die Ergebnisse gehst, dann machst du quasi (Content-IDs nur Beispiele) :

[== smarty ==]
{content_dump start_id=1 assign="dump_de" ... }
{content_dump start_id=100 assign="dump_en" ... }

{assign var="i" value=0}
	
{foreach $dump_de as $dump_de_element}
	Englischer Text: {$dump_de_element->content->data}
	Englischer Alias: {$dump_en[$i]->content->alias}
	{assign var="i" value=$i+1}
{/foreach}

Das ganze fliegt dir aber unter bestimmten Bedingungen um die Ohren. Und zwar, wenn die Reihenfolge der Ergebnisse ungleich ist (weil z.B. die englischen Artikel in anderer Reihenfolge angelegt wurden und bei Sortierung nach "neueste zuerst" halt anders liegen).

Wenn man das alles selber pflegt und das weiß, dann ist das eigentlich kein Problem und könnte man so machen. Wenn andere die Site pflegen würde ich davon abraten.

Im Idealfall kannst du also etwas anders als Matching-Kriterium nutzen. Entweder Extra-Content-Felder in denen du die Verweise pflegst (DE enthält den EN Alias). Denn solange du im DE Produkt keinen expliziten Verweis zum EN Produkt hast, musst du im Endeffekt raten. Je nach Vielfalt kann man damit sehr gut fahren oder halt Chaos verursachen.

Wenn du am EN Produkt explizit eine Referenz zum DE Produkt hast (idealerweise die Page-ID des deutschen Produktes), dann kannst du die Schleifen z.B. anders herum fahren.

[== smarty ==]
{content_dump start_id=100 assign="dump_en" ... extensions="referenz_id"}

{assign var="i" value=0}
	
{foreach $dump_en as $dump_en_element}
	{content_dump assign="dump_de" this_only=$dump_en_element->extensions->referenz_id->content}
	Englischer Text: {$dump_de[0]->content->data}
	Englischer Alias: {$dump_en_element->content->alias}
{/foreach}

Für die Aggregation aus mehreren Seitenbäumen zusammen in ein Objekt ist CD leider nicht gebaut worden. Daher bleibt es im Endeffekt immer eine kleine Frickellösung, da du irgendwie die beiden Seiten matchen musst.

Das ist was mir so im Moment einfällt, wenn man das über CD lösen möchte.

Grüße
Nils

Offline

#3 02. Mai 2013 16:06

bd0
Server-Pate
Ort: Köln
Registriert: 22. Juni 2011
Beiträge: 185

Re: [GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Hallo, den Lösungsansatz oben habe ich glaube ich im groben verstanden. Ich wollte gerne nicht den kompletten Seitenzweig mit den einzelnen Artikeln duplizieren müssen (sonst könnte ich die Inahlte auch direkt dort eintragen), sondern ich hatte mir vorgestellt dass ich auf der Unterseite 2.3.1 etwas in dieser Art eintrage:

[== smarty ==]
{content_dump depth="3,1" html="strip" first_sort="created" first_sort_order="down" extensions="enInhalt, enTitle, enShort"} 
{foreach from=$dump item=one_item}

	{if ($one_item->content->id == [b]$detailID[/b])}
		<p>{$one_item->extensions->enTitle->data}</p>
		<p>{$one_item->extensions->enShort->data}</p>
		<p>{$one_item->extensions->enInhalt->data}</p>
	{/if}

{/foreach}

damit würde ich gezielt nur den Eintrag aus content_dump ausfiltern der in der Listenansicht geklickt wurde. Denke das sollte doch so funktionieren?
D.h. es gibt die Listenansicht mit den Kurzbeschreibungen und Link auf Details. Bei Klick auf den Detailslink werde ich auf die seite 2.3.1 geschickt auf der das Smarty-script den entsprechenden Inhalt anhand der detailID (die der pageid entspricht) ausfiltert.
meine Frage ist nun: wie kann ich die PageID der Listenansicht so zwischenspeichern dass ich auf der Seite 2.3.1 (wo das Smarty-script die Anzeige erzeugen soll) darauf zugreifen kann. Also die PageID der deutschen Zielseite in der variable $detailID ablegen und dann mit dem Smarty-script abfragen und nur genau diesen Inhalt anzeigen.

Offline

#4 06. Mai 2013 11:05

bd0
Server-Pate
Ort: Köln
Registriert: 22. Juni 2011
Beiträge: 185

Re: [GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Ich habe es jetzt wie folgt gelöst:

In der Listenansicht verlinke ich auf die englische Detailseite die per content_dump die Artikelansicht aus dem deutschen Inhalt erzeugt. Dem Link gebe ich das alias der entsprechenden Detailseite vom deutschen Seitenzweig mit:

<a href="details?detailalias={$one_item->content->alias}">details</a>

Die Url sieht dann z.b. so aus: http://www.mydomain.de/details/?detailalias=artikel-2

Das wird dann in auf der Detailseite verwendet um nur diesen einen Artikel gezielt darzustellen.
{$smarty.get.detailalias} holt sich den Inhalt von "detailalias" aus der Url.

[== smarty ==]
{content_dump depth="3,1" html="strip" first_sort="created" first_sort_order="down" extensions="enInhalt, enTitle, enShort"} 
{foreach from=$dump item=one_item}

	{if ($one_item->content->alias) == $smarty.get.detailalias }
		<p>{$one_item->extensions->enTitle->data}</p>
		<p>{$one_item->extensions->enShort->data}</p>
		<p>{$one_item->extensions->enInhalt->data}</p>
	{/if}

{/foreach}

Es ist vielleicht nicht sonderlich elegant gelöst aber so funktioniert es ohne Extraarbeit beim einpflegen neuer Artikel. Man muss also nicht die Seitenstruktur duplizieren oder ähnliches. Falls jemand eine einfachere eleganter Lösung kennt wäre es natürlich prima wenn er das hier kund täte.

Beitrag geändert von bd0 (06. Mai 2013 11:07)

Offline

#5 06. Mai 2013 11:16

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.807
Webseite

Re: [GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Wenn du die Get Abfrage hier direkt verwendest, solltest du den Wert erstmals absichern, so dass nur Buchstaben, Zahlen und Striche erlaubt sind.


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

Offline

#6 06. Mai 2013 13:01

bd0
Server-Pate
Ort: Köln
Registriert: 22. Juni 2011
Beiträge: 185

Re: [GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Ich weiß nicht was du genau meinst. Ich bin nicht sonderlich firm was Smarty angeht. Kannst du ein konkretes Beispiel machen wie es besser/richtig ist?

Offline

#7 12. Mai 2013 22:36

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.878
Webseite

Re: [GELÖST] englische Produktdetailseiten mit Content Dump und MleCMS erzeugen?

Das hat nix speziell mit Smarty zu tun, sondern eher mit PHP bzw. der Server-Variablen $_GET['detailalias'] (entspricht $smarty.get.detailalias), über die sich so ziemlich jeder Blödsinn an den Server weiterleiten lässt, was natürlich ein Sicherheitsrisiko darstellt.

Daher solltest du den Wert dieser Variablen nicht ungefiltert übernehmen. Dies wäre zumindest ein Anfang

	{if ($one_item->content->alias) == $smarty.get.detailalias|strip_tags}

1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline