[geloest]Suche Modul für Tabs im Frontend & Gezielt Content-Blöcke drucken?

Hilfe zu Modulen und Tags
Post Reply
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

[geloest]Suche Modul für Tabs im Frontend & Gezielt Content-Blöcke drucken?

Post by jeff1980 »

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
Last edited by jeff1980 on Tue Jul 20, 2010 12:13 pm, edited 1 time in total.
Andiministrator

Re: Suche Tag/Modul für Tabs/Reiter im Frontend

Post by Andiministrator »

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.
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Suche Tag/Modul für Tabs/Reiter im Frontend

Post by jeff1980 »

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
cyberman

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by cyberman »

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/
Wolltest du nicht was ohe JS ;)?
Leider bin ich noch nicht ganz zufrieden damit, da die Tabs nicht sofort geladen werden.
Zum einen solltest du dir die Seite mal mit Pagespeed (das FF-Plugin) anschauen - da lässt sich noch viel Zeit gewinnen.

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>
Hab immer wieder festgestellt, dass die Google Server sehr schnell sind ...
Gibts beim Print-Modul einen Parameter, bei dem man ihm mitgibt, welchen Content-Block es ausgeben soll? Hab in der Hilfe nichts gefunden.
Parameter gibt es keinen, aber auch das Druck-Template verwendet Smarty - evtl. kann man da mit ein bißchen Logik etwas hinbekommen ...
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by jeff1980 »

Hi Cyberman,
was freie Javascript-Lösungen angeht
... 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.

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
User avatar
hardy
Translator
Translator
Posts: 12
Joined: Thu Feb 18, 2010 6:05 am

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by hardy »

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}.
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
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by jeff1980 »

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
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by jeff1980 »

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:

Code: Select all

http://www.festtagsgedichte.de/index.php?mact=Printing,cntnt01,output,0&cntnt01url=aHR0cDovL3d3dy5mZXN0dGFnc2dlZGljaHRlLmRlL2Zlc3R0YWdlL2dlYnVydHN0YWctYWxsZ2VtZWluL2dlYnVydHN0YWdzZGljaHR1bmcuaHRtP3Nob3d0ZW1wbGF0ZT1mYWxzZQ%3D%3D&cntnt01pageid=277&cntnt01returnid=277?lang=de
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
NaN

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by NaN »

?lang=de ist falsch.

&lang=de soltle es heißen.
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: Suche Tag/Modul für Tabs/Reiter im Frontend & Gezielt Content-Blöcke drucken?

Post by jeff1980 »

::) {schäm}...
Jetzt wird der Parameter übergeben...
Und es läuft! Juhu!

Danke schön  :)

Jan
Post Reply

Return to “Module und Tags”