[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Anfangs- und End-Tag bei mehreren gleichen Modulen - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Don Michele
Beiträge: 37
Registriert: 10. Feb 2008, 16:19

Anfangs- und End-Tag bei mehreren gleichen Modulen

28. Mär 2011, 21:45

Hallo,

angenommen ich habe ein Modul:

<tr><td>REX_VALUE[...]</td></tr>

und ich hätte gerne, dass wenn ich das erste Mal das Modul hinzufüge automatisch ein "<table>" davor und wenn ich das letzte Mal das Modul verwendet habe automatisch ein "</table>" dahinter geschrieben wird.

Wie mache ich das besten?

danke!

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Anfangs- und End-Tag bei mehreren gleichen Modulen

28. Mär 2011, 22:54

Don Michele hat geschrieben:hätte gerne, dass wenn ich das erste Mal das Modul hinzufüge automatisch ein "<table>" davor und wenn ich das letzte Mal das Modul verwendet habe automatisch ein "</table>" dahinter geschrieben wird.
Mögliche Ansätze: http://www.redaxo.org/de/forum/module-a ... 16015.html

hth,
Jan
vg, Jan


Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Anfangs- und End-Tag bei mehreren gleichen Modulen

31. Mär 2011, 04:33

So,

was ich dir schrob wg. Performance/Anzahl der SQL Queries: Hab ne bessere Variante.. die braucht jetzt "nur" noch Anzahl der Modul-Instanzen+1 queries.. die alte brauchte Anzahl der Modul-Instanzen x 3. Es bleibt dabei, daß andere Methode - wie z.b. Olis: Bezug von anderen Artikeln innerhlab des Wrappers - dahingehend nachwievor performanter sind, aber das muß man halt selbst abwägen - Autonomie des Moduls (ohne Bezug o.ä.) vs. zusätzliche SQL queries.

Code: Alles auswählen

// AUTO WRAPPER
////////////////////////////////////////////////////////////////////////////////
$mid     = 'foo'; /* UNIQUE MODUL IDENTIFIER */
$wrapper = array('<ol class="liststyle">','</ol>');
$open    = $close = '';

if(!isset($wrap_ctrl[$mid]))
{
  $open = $wrapper[0];
  $cur  = OOArticleSlice::getArticleSliceById('REX_SLICE_ID','REX_CLANG_ID',0);
}
else
{
  $cur  = $wrap_ctrl[$mid];
}

$next = $cur->getNextSlice();
if(!is_object($next) || ($cur->getModuleId() != $next->getModuleId()))
{
  $close = $wrapper[1];
  unset($wrap_ctrl[$mid]);
}
else
{
  $wrap_ctrl[$mid] = $next;
}
lg,
Jan
Zuletzt geändert von jdlx am 7. Apr 2014, 14:42, insgesamt 1-mal geändert.
vg, Jan

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

Re: Anfangs- und End-Tag bei mehreren gleichen Modulen

31. Mär 2011, 10:01

Hallo,

ich habe gerade mal ein bisschen rumprobiert und bin auf eine Möglichkeit ohne SQL-Abfragen gekommen.
Das Prinzip: Bei jedem Slice wird die bis dahin vollständige Liste mit Start- und End-Tag in den Ausgabepuffer geschrieben und der vorherige Puffer gelöscht. Somit bleibt letztendlich die letzte, also vollständige Liste übrig.
Ist also ein bisschen Trickserei, auch nur mäßig schön, und ich kann auch noch nicht sagen, ob das eventuell in manchen Zusammenhängen zu Problemen führen könnte.
Andere Module zwischendrin machen aber keine Probleme.

Code: Alles auswählen

<?php

if($REX['REDAXO'])
{
  echo 'item';
}
else
{
  if(!function_exists('rex_module_content_REX_MODULE_ID'))
  {
    ob_start();

    function rex_module_content_REX_MODULE_ID($slice)
    {
      static $content = '';
      static $last = '';

      $out = ob_get_clean();

      if($last != $out)
      {
        echo $out;
        $content = '';
      }

      ob_start();

      $content .= $slice;
      $last = '<ol>'.$content.'</ol>';
      echo $last;
    }
  }

  rex_module_content_REX_MODULE_ID('<li>item</li>');
}

?>
Gruß, Gregor
Friends Of REDAXO: Gemeinsame REDAXO-Entwicklung!

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Anfangs- und End-Tag bei mehreren gleichen Modulen

31. Mär 2011, 10:16

Gregor.Harlan hat geschrieben:ich habe gerade mal ein bisschen rumprobiert
hehe.. ich wußte das du noch was ausm Ärmel ziehst ;) nice trick!

lg,
Jan
vg, Jan

morfer
Beiträge: 105
Registriert: 24. Mär 2009, 01:58

Re: Anfangs- und End-Tag bei mehreren gleichen Modulen

7. Jan 2012, 18:46

Hallo,
sitze auch gerade vor einem Modul was mehrfach in einem Artikel angewendet wird. Es generiert 10 mal ein Bild + Text (für den NivoSlider). Dieses Modul soll beim 1. Einstaz ein "<div id="nivoslider">" ausspucken. Das letzte Modul dann das dazugehörige "</div>".

Mit dem Code von Gregor komme ich nicht klar?! Dieser generiert in jedem Moduleinsatz immer die gleiche Ausgabe?!

Wäre über einen Tipp sehr dankbar.

Viele Grüße
Daniel W.

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: Anfangs- und End-Tag bei mehreren gleichen Modulen

9. Jan 2012, 18:46

genauso habe ich das auchmal eingesetzt bei einem galerie-modul.

Code: Alles auswählen

<?php
	$file = "";
  	if ("REX_FILE[1]" != "") $file = '<img src="index.php?rex_img_type=slider-bild&rex_img_file=REX_FILE[1]" title="" alt="" />';
	$text = '<div class="lof-main-item-desc"><p>REX_VALUE[1]</p>';
#	$link = '<p class="readmore"><a href="REX_LINK[1]">mehr erfahren</a></p></div>';	
	$link = '<p class="readmore"></p></div>';	
	$val = $file.$text.$link;

if($REX['REDAXO'])
{
#  echo $val;
}
else
{
  if(!function_exists('rex_module_content_REX_MODULE_ID'))
  {
    ob_start();
    function rex_module_content_REX_MODULE_ID($slice)
    {
      static $content = '';
      static $last = '';
      $out = ob_get_clean();
      if($last != $out)
      {
        echo $out;
        $content = '';
      }
      ob_start();
      $content .= $slice;
      $last = '<div id="lofslidecontent45" class="lof-slidecontent" style="width:710px; height:270px;"><div class="preload"><div></div></div>
<div class="lof-main-outer" style="width:710px; height:270px;">
<div onclick="return false" href="" class="lof-previous">Previous</div>
<ul class="lof-main-wapper">'.$content.'</ul>  	
<div onclick="return false" href="" class="lof-next">Next</div>
</div> </div>';
      echo $last;
    }
  }
  rex_module_content_REX_MODULE_ID('<li>'.$val.'</li>');
}
?>
siehe hier:
http://www.stadtwerke-hilden.de

Zurück zu „Allgemeines [R4]“