[geloest]Suche Modul für Tabs im Frontend & Gezielt Content-Blöcke drucken?
[geloest]Suche Modul für Tabs im Frontend & Gezielt Content-Blöcke drucken?
Hallo,
wir sind gerade dabei, eine Seite teilweise mehrsprachig aufzubauen. Das Ganze regeln wir über zusätzliche content-Blöcke.
Diese kann ich ja im Template ohne Probleme in eigene divs packen, um gezielt darauf zuzugreifen (Javascript-mäßig).
Bis jetzt werden die Texte noch untereinander angezeigt (mit Flaggen neben der Überschrift und Ankern - nicht schön, aber zum Testen reichts ;D).
Gibt es einen Tag oder ein Modul, mit dem man - ähnlich wie im Backend - einfach mehrere Tabs erstellen kann?
Ich bin auch offen für Tipps was freie Javascript-Lösungen angeht. Aber es gibt da so viel und vielleicht hat ja jemand schon gute Erfahrungen mit einer Lösung gemacht.
Bin wie immer für jeden Tipp dankaber :)
Jan
wir sind gerade dabei, eine Seite teilweise mehrsprachig aufzubauen. Das Ganze regeln wir über zusätzliche content-Blöcke.
Diese kann ich ja im Template ohne Probleme in eigene divs packen, um gezielt darauf zuzugreifen (Javascript-mäßig).
Bis jetzt werden die Texte noch untereinander angezeigt (mit Flaggen neben der Überschrift und Ankern - nicht schön, aber zum Testen reichts ;D).
Gibt es einen Tag oder ein Modul, mit dem man - ähnlich wie im Backend - einfach mehrere Tabs erstellen kann?
Ich bin auch offen für Tipps was freie Javascript-Lösungen angeht. Aber es gibt da so viel und vielleicht hat ja jemand schon gute Erfahrungen mit einer Lösung gemacht.
Bin wie immer für jeden Tipp dankaber :)
Jan
Last edited by jeff1980 on Tue Jul 20, 2010 12:13 pm, edited 1 time in total.
Re: Suche Tag/Modul für Tabs/Reiter im Frontend
Dafür würde sich "ContentDump" eignen, denke ich. Die Tabs würde ich mittels einem jQuery Plugin umsetzen. Mein Kollege (hardy) hat so etwas schon mal umgesetzt.
Re: Suche Tag/Modul für Tabs/Reiter im Frontend
Hi,
auf ContentDump wäre ich nie gekommen dafür - hab ich in diesem Falle auch nicht gebraucht. Ich hab mal diese Lösung genommen, da ich immer wieder darauf gestoßen bin bei meiner Suche:
http://www.stilbuero.de/jquery/tabs_3/
Das Ergebnis sieht nun z.B. so aus:
http://www.festtagsgedichte.de/festtage ... ndchen.htm
Leider bin ich noch nicht ganz zufrieden damit, da die Tabs nicht sofort geladen werden. Im IE dauert es noch länger als im Firefox. Ich vermute, das hat mit irgendeinem externen Code zu tun (Google o.ä.). Da setze ich mich aber noch mal dran.
Weißt Du, wie das PlugIn ,das Hardy benutzt hat, heißt?
Eine andere Sache:
Wäre natürlich toll, wenn man die Sprachen getrennt ausdrucken könnte (im Moment kann man nur die deutsche Version drucken). Gibts beim Print-Modul einen Parameter, bei dem man ihm mitgibt, welchen Content-Block es ausgeben soll? Hab in der Hilfe nichts gefunden.
Ich kann zwar theoretisch alle Content-Blöcke in das Print-Template einfügen, sie erscheinen dann aber auch immer alle.
Jan
auf ContentDump wäre ich nie gekommen dafür - hab ich in diesem Falle auch nicht gebraucht. Ich hab mal diese Lösung genommen, da ich immer wieder darauf gestoßen bin bei meiner Suche:
http://www.stilbuero.de/jquery/tabs_3/
Das Ergebnis sieht nun z.B. so aus:
http://www.festtagsgedichte.de/festtage ... ndchen.htm
Leider bin ich noch nicht ganz zufrieden damit, da die Tabs nicht sofort geladen werden. Im IE dauert es noch länger als im Firefox. Ich vermute, das hat mit irgendeinem externen Code zu tun (Google o.ä.). Da setze ich mich aber noch mal dran.
Weißt Du, wie das PlugIn ,das Hardy benutzt hat, heißt?
Eine andere Sache:
Wäre natürlich toll, wenn man die Sprachen getrennt ausdrucken könnte (im Moment kann man nur die deutsche Version drucken). Gibts beim Print-Modul einen Parameter, bei dem man ihm mitgibt, welchen Content-Block es ausgeben soll? Hab in der Hilfe nichts gefunden.
Ich kann zwar theoretisch alle Content-Blöcke in das Print-Template einfügen, sie erscheinen dann aber auch immer alle.
Jan
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
Wolltest du nicht was ohe JS ?jeff1980 wrote: Ich hab mal diese Lösung genommen, da ich immer wieder darauf gestoßen bin bei meiner Suche:
http://www.stilbuero.de/jquery/tabs_3/
Zum einen solltest du dir die Seite mal mit Pagespeed (das FF-Plugin) anschauen - da lässt sich noch viel Zeit gewinnen.Leider bin ich noch nicht ganz zufrieden damit, da die Tabs nicht sofort geladen werden.
Zum anderen - hast du schon mal versucht, jquery extern einzubinden?
Code: Select all
<__script__ type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></__script>
Parameter gibt es keinen, aber auch das Druck-Template verwendet Smarty - evtl. kann man da mit ein bißchen Logik etwas hinbekommen ...Gibts beim Print-Modul einen Parameter, bei dem man ihm mitgibt, welchen Content-Block es ausgeben soll? Hab in der Hilfe nichts gefunden.
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
Hi Cyberman,
Die Geschwindigkeit werd ich nachher mal checken. Die Scripte lagen erst extern - da hab ich keinen großen Unterschied bemerkt. Kann ich mir aber mit dem FF-Plugin noch mal näher anschauen.
Was das Drucken angeht dachte ich, es gibt da evtl. schon ne Lösung - Mist . Dann schaue ich mir das mal an und sehe, was ich da tun kann... Wenn ich was hinbekomme, gebe ich hier mal Bescheid.
Danke für die Tipps.
Jan
... nicht "Javascript-freie Lösung . JS ist schon ok für mich, solange ich nicht selber was damit programmieren muss - dafür reichts bei mir noch nicht.was freie Javascript-Lösungen angeht
Die Geschwindigkeit werd ich nachher mal checken. Die Scripte lagen erst extern - da hab ich keinen großen Unterschied bemerkt. Kann ich mir aber mit dem FF-Plugin noch mal näher anschauen.
Was das Drucken angeht dachte ich, es gibt da evtl. schon ne Lösung - Mist . Dann schaue ich mir das mal an und sehe, was ich da tun kann... Wenn ich was hinbekomme, gebe ich hier mal Bescheid.
Danke für die Tipps.
Jan
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
hi,
also für die tabs verwende ich jquery.tabs.js. dein tabs_3 scheint ja das gleiche zu machen oder ist vielleicht sogar eine erweiterung von jenem, das ich verwende.
was content_dump betrifft, so benutze ich es, um die inhalte für die tabs zu laden und das "tabgerüst" für das javascript zu bauen. wenn du nämlich irgendwann mehr sprachen und/oder inhalt reinbringst, wird der contentblock im backend ziemlich lang und unübersichtlich. deswegen habe ich für jeden tabinhalt (z.b. in deinem falle für jede sprache)eine unterseite. die kannst du im menü auch ausblenden, damit sie in der navigation nicht verwirren. content_dump kann per parameter auch solche seiten anzeigen.verpacke die ausgabe dann einfach in die tab-struktur, die das script erwartet.
jquery.tabs.js erwartet einen gesamtcontainer (frei bennenbar - hier "tabs"), darin für jedes tab einen container ("tabbody") und den tabtitel (frei wählbar - hier h2).
mit content_dump in einem globalen content block:
{content_dump depth="3,3" show_in_menu="force" start_id=$content_id extensions="SummaryPreview,TNImage"}
{foreach from=$dump item=dump}
{$dump->content->title}
{$dump->content->data}
{/foreach}
da mir content_dump aber an manchen stellen zu umfangreich ist, habe ich mir mein eigenes kleines udt für die tabs gebastelt. da brauche ich nur die page-id zu übergeben und ab geht's.
Aufruf:
{if $content_obj->HasChildren() == true}{list_childs pageid=$content_id}{/if}
der aufruf prüft erstmal, ob die aktuelle seite überhaupt unterseiten hat. als einziger parameter wird die page-id übergeben. in diesem falle die aktuelle.
udt:
// ToDo:
global $gCms;
$smarty = &$gCms->GetSmarty();
$pageid = $params['pageid'];
$content = "";
$db = &$gCms->db;
$sql_parents_query_start = "SELECT content_id,content_alias,content_name,hierarchy FROM ".cms_db_prefix()."content WHERE parent_id = $pageid ORDER BY hierarchy ASC";
$childrens = $db->Execute($sql_parents_query_start);
while ($childrens && $childrensrow = $childrens->FetchRow()){
$sql_page_content = "SELECT content FROM ".cms_db_prefix()."content_props WHERE content_id = ".$childrensrow['content_id']." AND prop_name = 'content_en'";
$childrenscontent = $db->Execute($sql_page_content);
while ($childrenscontent && $childrenscontentrow = $childrenscontent->FetchRow()){
$content .= "".$childrensrow['content_name']."".$childrenscontentrow['content']."";
}
}
$smarty->_compile_source('temporary template', $content, $_compiled);
@ob_start();
$smarty->_eval('?>' . $_compiled);
$content = @ob_get_contents();
@ob_end_clean();
return $content."";
das tag bastelt mir jetzt die tabstruktur mit container und tabbeschriftung(h2). die letzten zeilen sind wichtig, falls seiteninhalte mit smarty erstellt werden (variablen, abfragen u.s.w.). diese zeilen kompilieren den content, damit das ergebniss korrekt angezeigt wird.
das schöne an dieser unterseitenmethode ist, das du auch dein "druckproblem lösen kannst, ohne im druckmodul etwas zu verändern (updatefähigkeit erhalten!).
dazu brauchst du z.b. nur die smartyvariable für den drucklink ("href") vom printmodul um den gewünschten page alias zu erweitern( "?contentalias=xxx"). setze den printlink in jeden tab content block und verpasse dem link den seitenalias der jeweiligen sprachversion (z.b. "?contentalias=englischer_alias").
modifiziere das drucktemplate indem du {content} mit dem aufruf eines udt ersetzt - {get_content_from pagealias=$page_alias}.
dieser hätte zum beispiel folgenden inhalt:
global $gCms;
$smarty = &$gCms->GetSmarty();
if(!isset($params['pagealias'])){return;}else{$pagealias = $params['pagealias'];}
$string = "";
$db = &$gCms->db;
$sql_id = "SELECT content_id FROM ".cms_db_prefix()."content WHERE content_alias = '".$pagealias."'";
$pageid = $db->Execute($sql_id);
while ($pageid && $pageidrow = $pageid->FetchRow()){
$string .= $pageidrow['content_id'];
$sql_pagecontent = "SELECT content FROM ".cms_db_prefix()."content_props WHERE content_id = ".$pageidrow['content_id']." AND prop_name = 'content_en'";
$pagecontent = $db->Execute($sql_pagecontent);
while ($pagecontent && $pagecontentrow = $pagecontent->FetchRow()){
$content .= $pagecontentrow['content'];
}
}
$smarty->_compile_source('temporary template', $content, $_compiled);
@ob_start();
$smarty->_eval('?>' . $_compiled);
$content = @ob_get_contents();
@ob_end_clean();
return $content;
die variable page_alias wäre dann der alias der sprachseite, welchen du mit smarty einfach aus der url ausliest - {$smarty.get.page} bzw. {$smarty.post.page}.
also für die tabs verwende ich jquery.tabs.js. dein tabs_3 scheint ja das gleiche zu machen oder ist vielleicht sogar eine erweiterung von jenem, das ich verwende.
was content_dump betrifft, so benutze ich es, um die inhalte für die tabs zu laden und das "tabgerüst" für das javascript zu bauen. wenn du nämlich irgendwann mehr sprachen und/oder inhalt reinbringst, wird der contentblock im backend ziemlich lang und unübersichtlich. deswegen habe ich für jeden tabinhalt (z.b. in deinem falle für jede sprache)eine unterseite. die kannst du im menü auch ausblenden, damit sie in der navigation nicht verwirren. content_dump kann per parameter auch solche seiten anzeigen.verpacke die ausgabe dann einfach in die tab-struktur, die das script erwartet.
jquery.tabs.js erwartet einen gesamtcontainer (frei bennenbar - hier "tabs"), darin für jedes tab einen container ("tabbody") und den tabtitel (frei wählbar - hier h2).
mit content_dump in einem globalen content block:
{content_dump depth="3,3" show_in_menu="force" start_id=$content_id extensions="SummaryPreview,TNImage"}
{foreach from=$dump item=dump}
{$dump->content->title}
{$dump->content->data}
{/foreach}
da mir content_dump aber an manchen stellen zu umfangreich ist, habe ich mir mein eigenes kleines udt für die tabs gebastelt. da brauche ich nur die page-id zu übergeben und ab geht's.
Aufruf:
{if $content_obj->HasChildren() == true}{list_childs pageid=$content_id}{/if}
der aufruf prüft erstmal, ob die aktuelle seite überhaupt unterseiten hat. als einziger parameter wird die page-id übergeben. in diesem falle die aktuelle.
udt:
// ToDo:
global $gCms;
$smarty = &$gCms->GetSmarty();
$pageid = $params['pageid'];
$content = "";
$db = &$gCms->db;
$sql_parents_query_start = "SELECT content_id,content_alias,content_name,hierarchy FROM ".cms_db_prefix()."content WHERE parent_id = $pageid ORDER BY hierarchy ASC";
$childrens = $db->Execute($sql_parents_query_start);
while ($childrens && $childrensrow = $childrens->FetchRow()){
$sql_page_content = "SELECT content FROM ".cms_db_prefix()."content_props WHERE content_id = ".$childrensrow['content_id']." AND prop_name = 'content_en'";
$childrenscontent = $db->Execute($sql_page_content);
while ($childrenscontent && $childrenscontentrow = $childrenscontent->FetchRow()){
$content .= "".$childrensrow['content_name']."".$childrenscontentrow['content']."";
}
}
$smarty->_compile_source('temporary template', $content, $_compiled);
@ob_start();
$smarty->_eval('?>' . $_compiled);
$content = @ob_get_contents();
@ob_end_clean();
return $content."";
das tag bastelt mir jetzt die tabstruktur mit container und tabbeschriftung(h2). die letzten zeilen sind wichtig, falls seiteninhalte mit smarty erstellt werden (variablen, abfragen u.s.w.). diese zeilen kompilieren den content, damit das ergebniss korrekt angezeigt wird.
das schöne an dieser unterseitenmethode ist, das du auch dein "druckproblem lösen kannst, ohne im druckmodul etwas zu verändern (updatefähigkeit erhalten!).
dazu brauchst du z.b. nur die smartyvariable für den drucklink ("href") vom printmodul um den gewünschten page alias zu erweitern( "?contentalias=xxx"). setze den printlink in jeden tab content block und verpasse dem link den seitenalias der jeweiligen sprachversion (z.b. "?contentalias=englischer_alias").
modifiziere das drucktemplate indem du {content} mit dem aufruf eines udt ersetzt - {get_content_from pagealias=$page_alias}.
dieser hätte zum beispiel folgenden inhalt:
global $gCms;
$smarty = &$gCms->GetSmarty();
if(!isset($params['pagealias'])){return;}else{$pagealias = $params['pagealias'];}
$string = "";
$db = &$gCms->db;
$sql_id = "SELECT content_id FROM ".cms_db_prefix()."content WHERE content_alias = '".$pagealias."'";
$pageid = $db->Execute($sql_id);
while ($pageid && $pageidrow = $pageid->FetchRow()){
$string .= $pageidrow['content_id'];
$sql_pagecontent = "SELECT content FROM ".cms_db_prefix()."content_props WHERE content_id = ".$pageidrow['content_id']." AND prop_name = 'content_en'";
$pagecontent = $db->Execute($sql_pagecontent);
while ($pagecontent && $pagecontentrow = $pagecontent->FetchRow()){
$content .= $pagecontentrow['content'];
}
}
$smarty->_compile_source('temporary template', $content, $_compiled);
@ob_start();
$smarty->_eval('?>' . $_compiled);
$content = @ob_get_contents();
@ob_end_clean();
return $content;
die variable page_alias wäre dann der alias der sprachseite, welchen du mit smarty einfach aus der url ausliest - {$smarty.get.page} bzw. {$smarty.post.page}.
Last edited by hardy on Mon Jul 12, 2010 5:07 am, edited 1 time in total.
Hardy
Wenn man von Etwas keine Ahnung hat, braucht man auch keine Angst davor zu haben.
skype:hardyclas
Wenn man von Etwas keine Ahnung hat, braucht man auch keine Angst davor zu haben.
skype:hardyclas
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
Hi Hardy,
cool, danke für die tolle Hilfe und den Code. Ist ja doch etwas umfangreicher - denke ich werde es erst am Wochenende testen können. Aber das hört sich echt vielversprechend und vor allem flexibel an.
Zum Glück haben wir noch nicht so viele mehrsprachige Seiten, sodass wir noch testen können, welche Lösung letztendlich am besten für uns funktioniert.
Danke nochmal .
Jan
cool, danke für die tolle Hilfe und den Code. Ist ja doch etwas umfangreicher - denke ich werde es erst am Wochenende testen können. Aber das hört sich echt vielversprechend und vor allem flexibel an.
Zum Glück haben wir noch nicht so viele mehrsprachige Seiten, sodass wir noch testen können, welche Lösung letztendlich am besten für uns funktioniert.
Danke nochmal .
Jan
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
Hi,
da bin ich wieder. Schon ein Stückchen weiter, aber nun hänge ich wieder.
Den Code von Hardy habe ich ansatzweise ausprobieren können. Allerdings soll es weiterhin mit Content-Blöcken anstatt Unterseiten gelöst werden, da dies für die Autorin einfacher ist (die Seite ist schon so verzweigt)...
Aber den Tipp mit dem Parameter im Print-Link wollte ich heute umsetzen. Leider scheitert es daran, dass der Parameter nicht ausgelesen werden kann.
Es wird z.B. so ein Link generiert:
Das "lang=de" am Ende stammt von mir und wird für jede Sprache neu vergeben (de, en, fr, it etc.). Mit {$smarty.post.xxx} kann ich allerdings nur den ersten Parameter (mact) auslesen. Alle weiteren werden einfach nicht angezeigt. Habe auch schon versucht, das Fragezeichen durch "&cntnt01" oder "cntnt01 zu ersetzen. Ohne Erfolg.
Mein Gedanke ist der, dass ich im Drucktemplate mit {$smarty.post.xxx} die Sprache abfrage und ganz simpel mit if/elseif den entsprechenden Content-Block ausgebe. Wenn ich allerdings nicht an den Parameter komme, gehts natürlich nicht...
Jan
da bin ich wieder. Schon ein Stückchen weiter, aber nun hänge ich wieder.
Den Code von Hardy habe ich ansatzweise ausprobieren können. Allerdings soll es weiterhin mit Content-Blöcken anstatt Unterseiten gelöst werden, da dies für die Autorin einfacher ist (die Seite ist schon so verzweigt)...
Aber den Tipp mit dem Parameter im Print-Link wollte ich heute umsetzen. Leider scheitert es daran, dass der Parameter nicht ausgelesen werden kann.
Es wird z.B. so ein Link generiert:
Code: Select all
http://www.festtagsgedichte.de/index.php?mact=Printing,cntnt01,output,0&cntnt01url=aHR0cDovL3d3dy5mZXN0dGFnc2dlZGljaHRlLmRlL2Zlc3R0YWdlL2dlYnVydHN0YWctYWxsZ2VtZWluL2dlYnVydHN0YWdzZGljaHR1bmcuaHRtP3Nob3d0ZW1wbGF0ZT1mYWxzZQ%3D%3D&cntnt01pageid=277&cntnt01returnid=277?lang=de
Mein Gedanke ist der, dass ich im Drucktemplate mit {$smarty.post.xxx} die Sprache abfrage und ganz simpel mit if/elseif den entsprechenden Content-Block ausgebe. Wenn ich allerdings nicht an den Parameter komme, gehts natürlich nicht...
Jan
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
?lang=de ist falsch.
&lang=de soltle es heißen.
&lang=de soltle es heißen.
Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?
{schäm}...
Jetzt wird der Parameter übergeben...
Und es läuft! Juhu!
Danke schön
Jan
Jetzt wird der Parameter übergeben...
Und es läuft! Juhu!
Danke schön
Jan