Bereiche abhängig von der Anzahl an Elementen ausblenden

31. Jan 2012

Blenden Sie Bereiche aus, wenn diesen keine Inhalte zugewiesen wurden, um z.B. leere DIV-Container zu vermeiden.

Anhand der BASE Projektbasis wird Ihnen die Möglichkeit beschrieben, wie Sie den DIV-Container mit der id="blockBefore" ausblenden, falls sich darin keine Elemente befinden.

In diesem Block können globale oder navigationsabhängige Inhalte gesetzt bzw. zugewiesen werden. Ist kein globaler Inhalt und auch kein navigationsabhängiger Inhalt zugewiesen, würde der DIV-Container mit der id="blockBefore"  ohne Inhalt generiert werden. Dies kann je nach Projektumsetzung zu Darstellungsproblemen führen.

Für die Abfrage, wieviel Elemente in einem Bereich eingelesen wurden, greifen Sie auf die Framework-Funktionen der Framework-Klasse wOutput zurück (setNumberItemsDisplayed und getNumberItemsDisplayed).
Über WSL können Sie dann abhängig von der Anzahl an Elementen (wd:item) den gewünschten Bereich anzeigen oder ausblenden. wsl:ifGlobalValue liefert Ihnen hierzu das Instrument zur Abfrage des gesetzten globalen Wertes.

Um in der Bearbeitung trotz ausgeblendetem Bereich Elemente hinzufügen zu können, versehen Sie die Abfrage mit der Prüfung auf den Editor ($wIsInEditor).

blockBefore ausblenden - Ansicht im Frontend und Editorzoom
blockBefore ausblenden - Ansicht im Frontend und Editor

Beispiel: Auszug aus /IhrGlobalesProjekt/wGlobal/layout/templates/standard.wDocument.php zu blockBefore

...
<xsl:value-of select="php:functionString('wOutput::setNumberItemsDisplayed', '0')"/>
<wsl:ifGlobalValue key="hideBlockBefore" operator="!=" term="1" debug="0">
<div id="blockBefore">
  <div id="blockBeforeInner">

    <div id="areaContent3Global">
      <!-- Globale Inhalte oben-->
      <xsl:call-template name="content3Global" wd:pathTemplate="misc/includes.global.php#content3Global"/>
    </div>
  </div>
</div>
</wsl:ifGlobalValue>
<xsl:if test="php:functionString('wOutput::getNumberItemsDisplayed')&lt; 3 and not($wIsInEditor)">
  <xsl:value-of select="php:functionString('wEnv::setGlobalValue', 'hideBlockBefore', '1')"/>
</xsl:if>
<!--<xsl:value-of select="php:functionString('wOutput::getNumberItemsDisplayed')"/>-->
...

Erläuterungen zur Umsetzung

Beachten Sie, dass über die Framework-Funktion wOutput::getNumberItemsDisplayed die Anzahl an sichtbaren und somit eingelesenen Elementen hochgezählt wird, die bis zum Aufruf dieser Funktion in der Seite generiert wurden!
Um sicherzustellen, dass für einen Block die Anzahl korrekt ermittelt werden kann, sollten Sie über die Framework-Funktion wOutput::setNumberItemsDisplayed den Wert vor dem betreffenden Block auf Null setzen.

Weiterhin sollten Sie beachten, dass in einem Bereich auch Elemente bestehen können, die nur zum Einlesen anderer Elemente verwendet werden. Im Beispiel sind dies im blockBefore die beiden Elemente für das Einlesen von navigationsabhängigen Inhalten (content.includeContentNavigation) und für zusätzliche Inhalte der jeweiligen Seite (content.includeContentCurrentPage), welche nachfolgend auszugsweise zur default.php angeführt sind.. Diese Anzahl müssen Sie also von der gewünschten zu prüfenden Anzahl abziehen. Im Beispiel wird aus diesem Grund wOutput::getNumberItemsDisplayed auf einen Wert kleiner 3 geprüft und dann der globale Wert hideBlockBefore zur Steuerung der Abfrage gesetzt.

Beispiel: Auszug aus /IhrInhaltsProjekt/wGlobal/content/contentPortal/default.php zu content3

...
  <wd:group id="content3">
    <wd:item type="content.includeContentNavigation" uid="22add89e80a6bff0bf5d1e2ec8d1372f">
      <wd:fragment id="title" type="char.text"/>
      <wd:fragment id="display" type="char.display"/>
    </wd:item>
    <wd:item type="content.includeContentCurrentPage" uid="4a285188d80eda4eccd631e8f65ac804">
      <wd:fragment id="title" type="char.text"/>
      <wd:fragment id="display" type="char.display"/>
    </wd:item>
  </wd:group>
...

Entwicklerbereich Weblication® CMS - © Scholl Communications AG