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

Anfangs- und End-Tag bei mehreren gleichen Modulen

Verfasst: 28. Mär 2011, 21:45
von Don Michele
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!

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

Verfasst: 28. Mär 2011, 22:54
von jdlx
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

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

Verfasst: 29. Mär 2011, 12:47
von Don Michele
danke!

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

Verfasst: 31. Mär 2011, 04:33
von jdlx
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

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

Verfasst: 31. Mär 2011, 10:01
von Gregor.Harlan
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

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

Verfasst: 31. Mär 2011, 10:16
von jdlx
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

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

Verfasst: 7. Jan 2012, 18:46
von morfer
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.

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

Verfasst: 9. Jan 2012, 18:46
von nitzer
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