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

#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


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  roll .

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


[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

nockenfell schrieb:

Zuerst in ein Array umwandeln.

Danke, wieder was gelernt cool . Hab ich aber via Smarty2 auf die Schnelle nicht gehandelt bekommen  hmm .

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

czarnowski schrieb:

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