Pflegemasken für Metadaten aus der Dokumentenerweiterung

Seiteninhalte, die innerhalb der Haupt-Inhaltsbereiche (wd:group, siehe Abschnitt "Der Inhaltsbereich - die wd:group-Elemente") abgelegt sind, werden in der Regel über die XSL-Stylesheets für Strukturelemente pflegbar gemacht. Alle Seiteninhalte, die ausserhalb der Haupt-Inhaltsbereiche notiert sind, können nicht auf diese Weise zur Pflege angeboten werden. Für diesen Zweck existieren in Weblication® spezielle Pflegemasken.

Pflegemasken sind für den Redakteur aufbereitete Oberflächen, in denen prinzipiell beliebige Inhalte der XML-Inhaltsseiten zur Pflege angeboten werden. In den meisten Fällen werden hier Inhalte pflegbar gemacht, die ausserhalb der Hauptinhaltsbereiche notiert sind, wie beispielsweise Metadaten der Dokumentenerweiterung wd:extension oder Objekt-Daten.

Pflegemaske für die Metadaten der Dokumentenerweiterung
Pflegemaske für die Metadaten der Dokumentenerweiterung

Das XSLT-Stylesheet der Pflegemaske für Metadaten

Einbinden der Standard-Pflegemaske

Die Pflegemaske für Daten aus der Dokumentenerweiterung wird durch ein eigenständiges XSLT-Stylesheet erzeugt.

Dieses Stylesheet liegt in der BASE unterhalb folgendem Pfad:

/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/templates/editmasks/standard.metadata.php

Dieses Stylesheet wird im XSL-Darstellungstemplate standard.wDocument.php über folgenden Aufruf dynamisch eingebunden, sofern die Datei bearbeitet wird und sich im Editor befindet:

Einbinden der Standard-Pflegemaske für Metadaten aus der Dokumentenerweiterung

Einbinden der Pflegemaske für Metadaten
<xslIfIsInEditor:include href="$XSLTPRE[wDocumentRoot]/deGlobal/wGlobal/layout/templates/editmasks/standard.metadata.php"/>

Möchten Sie ein eigenes und/oder weiteres XSLT-Stylesheet als Pflegemaske verwenden, erstellen Sie dieses auf Basis der existierenden standard.metadata.php und legen es mit einem anderen Namen im selben Verzeichnis ab. Bitte beachten Sie, dass dann der Aufruf des Stylesheets im Darstellungstemplate verändert oder entsprechend erweitert werden muss. 

Aufruf der Pflegemaske

Nach dem Einbinden des XSLT-Styleheets der Pflegemaske muss dieses noch aufgerufen werden, sofern sich die Datei in Bearbeitung befindet. Dieser Aufruf erfolgt durch ein XSL:CALL-TEMPLATE Element, welches das entsprechende XSL:TEMPLATE mit dem Namen templateEditor aufruft. Das zugehörige XSL:TEMPLATE befindet sich im Stylesheet der Pflegemaske (standard.metadata.php)

Aufruf der Pflegemaske im XSLT-Darstellungstemplate

      <body>      
        <!-- Hier wird die Maske zur Pflege der Metadaten eingebunden, falls man sich im Editor befindet -->
        <xslIfIsInEditor:call-template name="templateEditor"/>

        <div id="blockMain">
          <div id="blockMainInner">

Aufbau der Pflegemaske

Der Aufbau der Pflegemaske folgt dem standardisierten Aufbau eines XSLT-Stylesheets. Es beinhaltet als einziges TEMPLATE-Element das im vorigen Schritt aufgerufene XSL:TEMPLATE NAME="templateEditor".

Innerhalb dieses Templates werden nun für alle XML-Elemente innerhalb des XML-Knotens wd:extension entsprechende Eingabefelder notiert.

Bitte beachten Sie:

In der Standard-Pflegemaske werden alle Elemente durch absolute XPATH-Angaben referenziert. Dies bedeutet, dass jedes Element explizit zur Pflege angegeben werden muss (siehe Beipspiel)

Beispielhafter Code zur Bearbeitung des XML-Elements wd:title innerhalb der wd:extension (Titel des Dokuments)

<!--web:text:start editor="input" inputStyle="width:100%;"-->
<xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/text()"/>
<!--web:text:stop-->

// Umbrüche im Code dienen lediglich der einfacherer Lesbarkeit
// Inhalte innerhalb von Pflegetags bitte IMMER ohne Umbrüche notieren!

Auf diese Weisen werden nun alle gewünschten Elemente der Dokumentenerweiterung pflegbar gemacht. Für unterschiedliche Typen an Datenfelder stehen Ihnen unterschiedliche web-Tags (Pflegetags) zur Verfügung. So können Texte beispielsweise mit einem reinen Texteditor oder einem WYSIWYG-Editor pflegbar gemacht werden, weiterhin stehen Ihnen Editoren zur Datei- oder Verzeichnisauswahl sowie Selectboxen zur Verfügung.

Eine vollständige Liste aller verfügbaren Pflegetags finden Sie hier:

Übersicht aller Pflegetags


Informationen zur Pflegemaske für Objekte finden Sie hier:

Pflegemasken für strukturierte Daten und Objekte

Code: Das komplette XSLT-Stylesheet für die Pflegemaske der BASE (Projektbasis)

Aufbau der Standard-Pflegemaske

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wsl="http://weblication.de/5.0/wsl" xmlns:wd="http://weblication.de/5.0/wd" xmlns:php="http://php.net/xsl" exclude-result-prefixes="wd wsl php" version="1.0">     

  <xsl:template name="templateEditor">
    <!--
      Der folgende Bereich steht Ihnen nur zur Verfügung, wenn Sie sich im Bearbeitungsmodus der Seite befinden.
      Hier können Sie sämtliche Meta-Daten (Seitentitel, Seitenbeschreibung, Keywords, etc.) der Seite pflegen.
      Desweiteren stehen Ihnen folgende weitere Einstellungsmöglichkeiten zu Verfügung:
        - Vorschaubild einer Seite
        - Veröffentlichungszeitraum
        - Zuweisung zu einer Kategorie
        - Zuweisung eines aktiven Navigationspunktes
    -->    
    <div id="wEditorExtensionArea">
      <div id="wEditorExtensionAreaInner">
        <div>

          <div class="wEditorExtensionFunction">     
            <xsl:attribute name="style">width:158px;<xsl:if test="//wd:extension/wd:status/wd:online/@status = 'timer'">width:540px;</xsl:if></xsl:attribute> 
            <label><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_online_status')"/>&#160;</label>            

            <xsl:choose>
              <xsl:when test="//wd:extension/wd:status/wd:online/@status = 'timer'">
                <img class="statusIcon" src="/weblication/grid5/gui/images/icon_small/status_zeitsteuerung.gif"/>             
              </xsl:when>          
              <xsl:when test="//wd:extension/wd:status/wd:online/@status = 'off'">
                <img class="statusIcon" src="/weblication/grid5/gui/images/icon_small/status_offline.gif"/>             
              </xsl:when>            
              <xsl:otherwise>
                <img class="statusIcon" src="/weblication/grid5/gui/images/icon_small/status_online.gif"/>
              </xsl:otherwise>
            </xsl:choose> 
              
            <!--web:text:start inputStyle="margin:0 0 0 4px;width:100px;height:17px;padding:0" editor="select" onchange="wEditor.saveDraftAndReload()" values="on|off|timer" texts="online|offline|zeitgesteuert"--><xsl:value-of select="/wd:document/wd:extension/wd:status/wd:online/@status"/><!--web:text:stop-->          
            <div style="display:inline;margin:-1px 0 0 4px">
              <xsl:if test="/wd:document/wd:extension/wd:status/wd:online/@status = 'timer'">
                <label><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_online_time_from')"/>:</label><!--web:text:start inputStyle="margin:0 0 0 4px;" editor="date" format="isoDateTime" display="calendarTime"--><xsl:value-of select="/wd:document/wd:extension/wd:status/wd:online/@from"/><!--web:text:stop-->
                <label style="padding:0 0 0 4px"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_online_time_to')"/>:</label><!--web:text:start inputStyle="margin:0 0 0 4px;" editor="date" format="isoDateTime" display="calendarTime"--><xsl:value-of select="/wd:document/wd:extension/wd:status/wd:online/@to"/><!--web:text:stop-->
              </xsl:if>
            </div>            
          </div>

          <wsl:php>
            <![CDATA[                  
             $correspondentLanguageFiles = wPageCur::getCorrespondentLanguageFiles();

             if(count($correspondentLanguageFiles) > 1){ 
             
               $languageStr = '';   
               foreach($correspondentLanguageFiles as $language => $data){
                 if($data['available'] == 1){
                   if($data['current'] != 1){
                     $languageStr .=  '<img class="flag" onclick="wEditor.toggleFileLanguageEmbed(\''.$data['path'].'\')" src="/spin-global/wGlobal/layout/images/flags/'.$language.'.gif" alt="'.$language.'"/>';
                   }
                 }  
               }
               if($languageStr != ''){ 
                 print '<div class="wEditorExtensionFunction">';
                 print '  <label>'.wTexts::getTextUser('editor_show_hide_language_sync').'&#160;</label>';
                 print $languageStr;   
                 print '</div>';
               }                  
             }
            ]]>                                        
          </wsl:php>
               
          <div class="wEditorExtensionFunctionLast">
            <label for="wShowHideStructureEditor"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_show_structure_editor')"/></label>
            <xsl:choose>
              <xsl:when test="not(php:functionString('wRequest::getCookie', 'showStructureEditor') = '0')">
                <span class="checkboxContainer"><input id="wShowHideStructureEditor" type="checkbox" checked="checked" onclick="this.checked ? wEditor.showStructureEditor('') : wEditor.hideStructureEditor('')"/></span>
              </xsl:when>
              <xsl:otherwise>
                <span class="checkboxContainer"><input id="wShowHideStructureEditor" type="checkbox" onclick="this.checked ? wEditor.showStructureEditor('') : wEditor.hideStructureEditor('')"/></span>       
              </xsl:otherwise>
            </xsl:choose>
          </div>               

          <div id="wEditorExtensionBlockMetaOpener" class="wEditorExtensionBlockMetaOpener" style="display:block;">
            <span class="wglButton">
              <xsl:attribute name="onclick">wDocument.toggleDisplay('wEditorExtensionAreaExtended', {'animate' : ''});wToggleDisplay('wEditorExtensionBlockMetaOpener');wToggleDisplay('wEditorExtensionBlockMetaCloser');</xsl:attribute>
              <img class="wglButtonIcon" src="/weblication/grid5/gui/images/icon_small/open.gif"/>
              <span class="wglButtonCaption"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_show_metadata')"/></span>
            </span>
          </div>
          
          <div id="wEditorExtensionBlockMetaCloser" class="wEditorExtensionBlockMetaCloser" style="display:none;">
            <wsl:buttonEdit icon="templates_editmasks" path="/spin-global/wGlobal/layout/templates/editmasks/standard.metadata.php" showInEditor="1" caption=""  title="{php:functionString('wTexts::getTextUser', 'editor_edit_metadata')}"/>          
            <span onclick="wToggleDisplay('wEditorExtensionAreaExtended');wToggleDisplay('wEditorExtensionBlockMetaOpener');wToggleDisplay('wEditorExtensionBlockMetaCloser');" class="wglButton"><img class="wglButtonIcon" src="/weblication/grid5/gui/images/icon_small/close.gif"/><span class="wglButtonCaption"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_hide_metadata')"/></span></span>
          </div>
                        
        </div>
        
        <div id="wEditorExtensionAreaExtended" style="display:none;">
          <div style="width:49%;float:left"> 
            <xsl:choose>
              <xsl:when test="not(/wd:document/wd:extension/wd:object/@type = 'default') and not(/wd:document/wd:extension/wd:object/@type = 'start')  and not(/wd:document/wd:extension/wd:object/@type = 'global') and /wd:document/wd:extension/wd:object/wd:data[@id='description']">
              </xsl:when> 
              <xsl:otherwise> 
                <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title')"/>*&#160;<span>(<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_info')"/>)</span></div>
                <div class="wEditorExtensionValue">                    
                  <!--web:text:start editor="input" inputStyle="width:100%;" validator="required" errorMessage="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_title_fill_out')"/>"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/text()"/><!--web:text:stop-->
                </div>                 
              </xsl:otherwise>
            </xsl:choose>                                     
            <xsl:choose>
              <xsl:when test="not(/wd:document/wd:extension/wd:object/@type = 'default') and not(/wd:document/wd:extension/wd:object/@type = 'start')  and not(/wd:document/wd:extension/wd:object/@type = 'global') and /wd:document/wd:extension/wd:object/wd:data[@id='description']">
              </xsl:when> 
              <xsl:otherwise> 
                <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description')"/>&#160;<span>(<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_description_info')"/>)</span></div>
                <div class="wEditorExtensionValue">                    
                  <!--web:text:start editor="textarea" inputStyle="height:32px;width:100%;"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:description/text()"/><!--web:text:stop-->
                </div>                 
              </xsl:otherwise>
            </xsl:choose>  
            <xsl:choose>
              <xsl:when test="not(/wd:document/wd:extension/wd:object/@type = 'default') and not(/wd:document/wd:extension/wd:object/@type = 'start')  and not(/wd:document/wd:extension/wd:object/@type = 'global') and /wd:document/wd:extension/wd:object/wd:data[@id='keywords']">
              </xsl:when> 
              <xsl:otherwise> 
                <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_keywords')"/>&#160;<span>(<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_keywords_info')"/>)</span></div>
                <div class="wEditorExtensionValue">                 
                  <!--web:text:start editor="input" inputStyle="width:100%"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:keywords/text()"/><!--web:text:stop-->
                </div>                 
              </xsl:otherwise>
            </xsl:choose>                            
            <table cellpadding="0" cellspacing="0">
              <tr>
                <td style="width:80px">
                  <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_robots')"/></div>                      
                  <div class="wEditorExtensionValue">
                    <!-- web:text:start editor="select" values="index|noindex" texts="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_yes')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_no')"/>" inputClass="select"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:robots/@value"/><!--web:text:stop-->
                  </div>
                </td>
                <xsl:if test="php:functionString('wVariables::getValue', 'clickAnalyzer_enable', '/spin-global') = 'yes'">
                  <td>
                    <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_clickAnalyzer')"/></div>                      
                    <div class="wEditorExtensionValue">
                      <!-- web:text:start editor="select" values="no|yes" texts="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_no')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_yes')"/>" inputClass="select"--><xsl:value-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'enableClickAnalyzer']/text()"/><!--web:text:stop-->
                    </div>
                  </td>
                </xsl:if>
              </tr>  
            </table>
            <xsl:if test="/wd:document/wd:extension/wd:object/@type = 'start'">
              <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_rss')"/></div>                             
              <div class="wEditorExtensionValue">
                <!--web:entries:start editor="file" inputStyle=""--><xsl:copy-of select="/wd:document/wd:extension/wd:object/wd:data[@id = 'rssFeeds']"/><!--web:entries:stop-->
              </div>         
            </xsl:if>     
          </div>
          <div style="width:49%;float:right;">
          
            <xsl:if test="/wd:document/wd:extension/wd:object/@type = 'default' or /wd:document/wd:extension/wd:object/@type = 'start' or /wd:document/wd:extension/wd:object/@type = 'global'">  
              <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_type')"/></div>
              <div class="wEditorExtensionValue"><!--web:text:start editor="select" values="start|default|global" texts="<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_type_start')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_type_default')"/>|<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_type_global')"/>" onchange="wEditor.saveDraftAndReload()" --><xsl:value-of select="/wd:document/wd:extension/wd:object/@type"/><!--web:text:stop--></div>
            </xsl:if>                  
          
            <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_thumbnail')"/>&#160;<span>(<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_thumbnail_info')"/>)</span></div>              
            <div class="wEditorExtensionValue">
              <!--web:text:start editor="file" dirType="image" pathIfEmpty="/spin-media/img" inputStyle="width:100%"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:thumbnail/@src"/><!--web:text:stop-->
            </div>

            <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_navpoint')"/>&#160;<span>(<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_navpoint_info')"/>)</span></div>              
            <div class="wEditorExtensionValue">
              <!--web:text:start editor="navid" allowUseLastNavId="" pathNavigation="<xsl:value-of select="$wProjectPath" />/wGlobal/content/navigations/standard.wNavigation.php|/spin-global/wGlobal/content/navigations/meta.wNavigation.php"--><xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:navpoint/@id"/><!--web:text:stop-->
            </div>  
            <xsl:choose>  
              <xsl:when test="not(/wd:document/wd:extension/wd:object/@type = 'default') and not(/wd:document/wd:extension/wd:object/@type = 'start') and /wd:document/wd:extension/wd:object/wd:data[@id='categories']">
              </xsl:when> 
              <xsl:otherwise>
              <div class="wEditorExtensionLabel"><xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_categories')"/>&#160;<span>(<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_categories_info')"/>)</span></div>                  
                <div class="wEditorExtensionValue">                     
                  <!--web:categories:start language="<xsl:value-of select="php:functionString('wUserCur::getLanguage')" />" pathCategories="/spin-global/wGlobal/content/categories/standard.wCategories.php" multiple="1" size="5"--><xsl:copy-of select="/wd:document/wd:extension/wd:meta/wd:categories"/><!--web:categories:stop-->
                  <wsl:buttonEdit path="/spin-global/wGlobal/content/categories/standard.wCategories.php" icon="edit" caption="{php:functionString('wTexts::getTextUser', 'editor_page_categories_edit')}" style="float:right;margin:2px 0 2px 0"/>
                </div>  
              </xsl:otherwise>
            </xsl:choose>
          </div>
        </div>
        <script type="text/javascript">
          <xsl:if test="(/wd:document/wd:extension/wd:object/@type = 'default' or /wd:document/wd:extension/wd:object/@type = 'start') and not(/wd:document/wd:extension/wd:meta/wd:title/text()) and not(/wd:document/wd:extension/wd:object/wd:data[@id='title']/text())">
            function openLayerMetadata(){
              wDocument.toggleDisplay('wEditorExtensionAreaExtended', {'animate' : ''});wToggleDisplay('wEditorExtensionBlockMetaOpener');wToggleDisplay('wEditorExtensionBlockMetaCloser');
            }
            window.setTimeout('openLayerMetadata()', 1000);

          </xsl:if>
          
          function wOnBeforeSave(){  
          
            //var titleId = 'webtag_text_<xsl:value-of select="/wd:document/wd:extension/wd:meta/wd:title/@wEditorId"/>';
            //alert(wDocument.element(titleId).value);          
          
            <xsl:choose>
              <xsl:when test="//wd:extension/wd:status/wd:online/@status = 'off'">
                return confirm('<xsl:value-of select="php:functionString('wTexts::getTextUser', 'editor_page_offline_confirm_before_save')"/>');
              </xsl:when>
              <xsl:otherwise>
                return true;
              </xsl:otherwise>
            </xsl:choose>
          }          
        </script>   
      </div>
    </div>
  </xsl:template>

</xsl:stylesheet>