So setzen Sie eine Dateiauswahlbox im Editor um
Veröffentlichungsdatum: 14. April 2010
Änderungsdatum: 26. November 2012
editor text bearbeitung auswahl select dateien files templates
Dieser Artikel beschreibt, wie Sie für die Dateibearbeitung über den Select-Texteditor Dateien zur Auswahl anbieten können. Dies wird z.B. in den Beispielprojekten innerhalb Listendateien zur Auswahl des Darstellungs-Templates verwendet.
Um in der Seitenbearbeitung dem Benutzer z.B. in den Listenoptionen unterschiedliche Zeilentemplates zur Auswahl anzubieten, können Sie dies über den Texteditor-Select realisieren:
Beispiel: Auszug aus einem Bearbeitenelement (z.B. list.standard.wItem.php) mit Auswahl über ein Script
... <!-- web:text:start editor="select" script="/de/wGlobal/scripts/editor/getListTemplates.php?pathProject=/deGlobal" validator="" errorMessage="" inputStyle=""--><xsl:value-of select="wd:fragment[@id='listtemplate']/text()"/><!-- web:text:stop --> ...
Beispiel: getListTemplates.php Script, das zur Auswahl verwendet wird
require_once($_SERVER['DOCUMENT_ROOT']."/weblication/grid.php");
$userType = wUserCur::getType();
if($userType != 'admin' && $userType != 'standard'){
exit;
}
$query = array();
$query['dir'] = wRequest::getParameter('pathProject').'/wGlobal/layout/templates/lists';
$query['filterset'] = array('type' => 'and', array('wPath' => '/wd:stat/@name', 'operator' => 'contains', 'condition' => '.wFilelist.php'));
$files = wRepository::selectDocuments($query);
$result = '<entries>';
foreach($files as $file){
$title = wDocumentData::getData($file, '/wd:extension/wd:meta/wd:title/text()');
if(strstr($file, 'album') == TRUE){
$isDisabledStr = 'disabled="disabled"';
}
else{
$isDisabledStr = '';
}
if($userType == 'admin'){
$result .= '<entry '.$isDisabledStr.' value="'.$file.'">'.$title.' ('.preg_replace("/\..*/", "", wPathName::getFileNameOnly($file)).')</entry>';
}
else{
$result .= '<entry value="'.$file.'">'.$title.'</entry>';
}
}
$result .= '</entries>';
print $result;Das oben angeführte Script liest über die Repository-Funktion das Verzeichnis der Listentemplates (Darstellungstemplates) aus und gibt über die DocumentData-Funktion in der Auswahlbox den Pfad und den Titel der gefundenen Dateien aus.
- Wie kann ich im Seiteneditor eine Dateiauswahlbox für die Dateibearbeitung umsetzen?
- Sie können für die Seitenbearbeitung, z. B. in den Listenoptionen, eine Auswahl über einen Texteditor-Select realisieren. Dazu wird im Editor-Element ein Select-Texteditor verwendet und ein Script angegeben, das die auswählbaren Dateien (z. B. Listentemplates) liefert.
- Welches Editor-Element wird in dem Beispiel zur Auswahl verwendet?
- Im Beispiel wird im Bearbeitenelement (z. B. <code class="codeInline">list.standard.wItem.php</code>) ein Select-Texteditor genutzt, erkennbar am Eintrag <code class="codeInline">editor="select"</code> und am <code class="codeInline">script</code>-Attribut: <code class="codeInline">getListTemplates.php?pathProject=/deGlobal</code>.
- Was macht das Beispiel-Script <code class="codeInline">getListTemplates.php</code>, das für die Auswahlbox verwendet wird?
- Das Script liest über eine Repository-Funktion das Verzeichnis der Listentemplates aus (<code class="codeInline">.../wGlobal/layout/templates/lists</code>). Anschließend filtert es passende Dateien (u. a. anhand von Dateien, die <code class="codeInline">.wFilelist.php</code> enthalten) und erzeugt daraus eine Ergebnisstruktur (<code class="codeInline"><entries></code> mit <code class="codeInline"><entry></code>-Elementen) für die Auswahlbox.
- Wie wird im Script bestimmt, welche Listentemplates angezeigt werden?
- Das Script baut eine Query zusammen: <code class="codeInline">dir</code> zeigt auf das Template-Verzeichnis und <code class="codeInline">filterset</code> filtert Dokumente so, dass sie im Pfad/Metadatenkriterium das enthalten, was für Listentemplates relevant ist (hier u. a. <code class="codeInline">.wFilelist.php</code> als Filterkriterium). Die Treffer werden danach über <code class="codeInline">wRepository::selectDocuments($query)</code> geholt.
- Wie setzt das Script die Anzeige-Texte (Titel) für die Auswahl zusammen?
- Für jedes gefundene Dokument holt das Script über <code class="codeInline">wDocumentData::getData(...)</code> den Titel aus den Metadaten (<code class="codeInline">/wd:extension/wd:meta/wd:title/text()</code>). Außerdem wird im Beispiel je nach Auswertung zusätzliche Information (Dateiname ohne Extension) an den Titel angehängt.
- Wie funktioniert die Rollenlogik (Admin vs. andere Nutzer) im Beispiel-Script?
- Das Script ermittelt den Benutzertyp (<code class="codeInline">$userType = wUserCur::getType()</code>) und unterscheidet zwischen <code class="codeInline">admin</code> und anderen (z. B. <code class="codeInline">standard</code>). Für <code class="codeInline">admin</code> werden zusätzliche Informationen im Anzeige-Text ergänzt; für Nicht-Admins wird der Auswahltext schlanker ausgegeben.
- Wann wird im Beispiel ein Eintrag in der Auswahlbox deaktiviert?
- Im Beispiel wird geprüft, ob der Dateipfad den String <code class="codeInline">album</code> enthält. Wenn das zutrifft, wird der Eintrag mit <code class="codeInline">disabled="disabled"</code> versehen; andernfalls wird kein <code class="codeInline">disabled</code> gesetzt.
- Welche grundlegende technische Idee steckt hinter der Umsetzung der Dateiauswahlbox?
- Die Idee ist, dass der Editor-Select nicht die Dateien statisch kennt, sondern ein Script verwendet, das die verfügbaren Dateien anhand eines Projektpfads und eines Repositories lädt. Dieses Script liefert dann die Einträge inkl. <code class="codeInline">value</code> (Dateipfad) und Anzeigeinformationen (Titel) an die Auswahlbox zurück.