Anfangs- und End-Tag bei mehreren gleichen Modulen

Wie verwendet man Module oder Aktion und passt diese an.

Anfangs- und End-Tag bei mehreren gleichen Modulen

Beitragvon Don Michele » 28. Mär 2011, 20: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!
Don Michele
 
Beiträge: 36
Registriert: 10. Feb 2008, 15:19

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

Beitragvon jeandeluxe » 28. Mär 2011, 21: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: module-aktionen-f28/hilfe-fur-ansatz-erweiterbarer-slider-t16015.html

hth,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

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

Beitragvon Don Michele » 29. Mär 2011, 11:47

danke!
Don Michele
 
Beiträge: 36
Registriert: 10. Feb 2008, 15:19

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

Beitragvon jeandeluxe » 31. Mär 2011, 03: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
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

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

Beitragvon Gregor.Harlan » 31. Mär 2011, 09: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
Benutzeravatar
Gregor.Harlan
Entwickler
 
Beiträge: 825
Registriert: 4. Jun 2007, 09:35
Wohnort: Dresden

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

Beitragvon jeandeluxe » 31. Mär 2011, 09: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
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

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

Beitragvon morfer » 7. Jan 2012, 17: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.
morfer
 
Beiträge: 32
Registriert: 24. Mär 2009, 00:58

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

Beitragvon nitzer » 9. Jan 2012, 17: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&amp;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
nitzer
 
Beiträge: 187
Registriert: 16. Okt 2006, 21:53
Wohnort: Erkrath


Zurück zu Module/Aktionen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste