Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 19. Juli 2013 08:42
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Globale Inhaltsblöcke per Zufall ausgeben
Guten Morgen,
ich habe 5 globale Inhaltsblöcke und möchte aus diesen
beim Laden einer Seite per Zufall einen anzeigen lassen.
Kann mir jemand auf die Sprünge helfen?
Gruss
Stefan
Offline
#2 19. Juli 2013 09:24
- Janl
- Server-Pate
- Ort: Freistadt, Österreich
- Registriert: 13. Dezember 2010
- Beiträge: 1.231
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
google ist dein Freund . . .
http://www.smarty.net/forums/viewtopic. … 817a1017bd
Kubuntu 22.04 - Win 11 pro / Kubuntu 20.04 - win10 pro
Offline
#3 19. Juli 2013 09:29
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: Globale Inhaltsblöcke per Zufall ausgeben
Danke, wenn man weiß wonach man suchen muss ist das wohl richtig ;-)
Das was da steht verstehe ich, aber mir ist noch nicht klar, wie ich das
mit meinen GCBs kombiniere ...
Offline
#4 19. Juli 2013 09:50
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Das kannst du wie folgt machen:
{assign var="gcb_names" value="nameBlock1,nameBlock2,nameBlock3"}
{assign var="gcb_array" value=","|explode:$gcb_names}
{$gcb_array|shuffle}
<p>{$gcb_array[0]} </p>
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#5 19. Juli 2013 10:01
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: Globale Inhaltsblöcke per Zufall ausgeben
Danke :-)
aber ich bekomme so per zufall den Namen des GCBs und nicht dessen Inhalt.
Offline
#6 19. Juli 2013 10:08
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Den Auftruf solltest du noch selber hinkriegen. Ich habe dir nur gezeigt wie du den Zufallsgenerator umsetzen kannst.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#7 19. Juli 2013 10:09
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
{global_content name=$gcb_array[0]}
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#8 19. Juli 2013 10:16
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: Globale Inhaltsblöcke per Zufall ausgeben
ja, ich senke mein Haupt ... danke Dir!!!!!!!
Offline
#9 19. Juli 2013 10:37
- Janl
- Server-Pate
- Ort: Freistadt, Österreich
- Registriert: 13. Dezember 2010
- Beiträge: 1.231
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Hallo Nockenfell,
der Smarty-array-shuffle kannte ich auch noch nicht, schönes Tänzchen!
mfg
Jan
Kubuntu 22.04 - Win 11 pro / Kubuntu 20.04 - win10 pro
Offline
#10 19. Juli 2013 10:49
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
ist eine ganz normale PHP Funktion. Da Smarty mit solchen umgehen kann, ist es am einfachsten zuerst auf PHP Seite zu suchen und anschliessend die Adaption auf Smarty vorzunehmen.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#11 19. Juli 2013 12:23
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: Globale Inhaltsblöcke per Zufall ausgeben
{assign var="gcb_names" value="nameBlock1,nameBlock2,nameBlock3"} {assign var="gcb_array" value=","|explode:$gcb_names}
Ab Smarty 3 geht's sogar noch einfacher:
{$gcb_array=['Block1','Block2','Block3',...]}
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
#12 19. Juli 2013 13:07
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Richtig. Da ich eine Lösung schon Copy-Paste hatte ...
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#13 13. Januar 2014 08:05
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Hmm, für'n Array funktioniert es. Aber wie bekomm ich ein Objekt geshuffled?
Hab gerade von 'ner ListIt 1.0 beta auf ListIt2 umgestellt, und ListIt2 verwendete ja Objekte.
Da funktioniert
{capture}{$items|@shuffle}{/capture}
nicht mehr .
Offline
#14 13. Januar 2014 09:26
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Zuerst in ein Array umwandeln.
http://stackoverflow.com/questions/1897 … cts-in-php
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#15 13. Januar 2014 10:11
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Globale Inhaltsblöcke per Zufall ausgeben
Die einfachere und logischere Variante wäre die das Plugin etwas abzuändern:
[== php ==]
function smarty_function_global_content($params, &$template)
{
$smarty = $template->smarty;
$smarty->assign('gcb_params',$params);
if (!empty($params['shuffle']))
{
$params['name']=cmsms()->GetDb()->GetCol("SELECT htmlblob_name FROM ".cms_db_prefix()."htmlblobs WHERE htmlblob_name LIKE '%".$params['name']."%' ORDER BY RAND() LIMIT 1;")[0];
}
$txt = $smarty->fetch('globalcontent:'.$params['name']);
if( isset($params['assign']) )
{
$smarty->assign(trim($params['assign']),$txt);
return;
}
return $txt;
}
Einsatz z.B. {global_content name='foo' shuffle=1}
findet alles was foo beinhaltet und wählt einen aus.
Offline
#16 13. Januar 2014 13:36
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Globale Inhaltsblöcke per Zufall ausgeben
Bei Listit2 gibt es in $orderby_map eine Definition RAND() zur Mysql Abfrage.
Die müsste man eigentlich nur aktivieren.
[== php ==]
private static $orderby_map = array(
// items
'item_id' => 'A.item_id', 'item_title' => 'A.title', 'item_position' => 'A.position', 'item_created' => 'A.create_time', 'item_modified' => 'A.modified_time', 'item_start' => 'A.start_time', 'item_end' => 'A.end_time',
// category
'category_id' => 'B.category_id', 'category_name' => 'B.category_name', 'category_hierarchy' => 'B.hierarchy', 'category_position' => 'B.position', // <- Not neccery valid, if JOIN to category table is not made, check this.
// functions
'rand'=>'RAND()'
);
Offline
#17 13. Januar 2014 17:45
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Globale Inhaltsblöcke per Zufall ausgeben
Bei der Gelegenheit aufgefallen
Listit2 aktuell erzeugt beim Duplizieren Dateien die nicht UTF8 sind.
Ferner ist der index in der Tabelle cms_module_templates NICHT auf unique gesetzt.
Das kann u.U. zu doppelten Templates führen wie auch zu Problemen bei einer Direktänderung (geht z.B. nicht mit Phpmyadmin).
Listit glänzt vor allem mit mangelnder Performance.
Offline
#18 13. Januar 2014 22:29
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
Zuerst in ein Array umwandeln.
Danke, wieder was gelernt . Hab ich aber via Smarty2 auf die Schnelle nicht gehandelt bekommen
.
Offline
#19 13. Januar 2014 22:47
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Globale Inhaltsblöcke per Zufall ausgeben
das Plugin etwas abzuändern:
Ausgehend von diesem Hinweis und nicht zuletzt aus Zeitgründen hab ich mich für folgende Änderung bzw. Ergänzung der action.default.php entschieden
if(isset($params['random'])) {
$where .= " ORDER BY RAND() LIMIT 1";
}
Macht in meinem Fall genau das, was ich benötige - hänge wie gesagt aus Versionsgründen bei LI2 1.1 fest.
Offline
Seiten: 1