Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Die Liste der Unterelemente: Einstellungen und ihre Spalten

Lesen Sie diese Seite, wenn Ihre Redakteure die Liste der Unterelemente in der Administration verwenden, wenn Sie children_detailed.tpl oder dessen JavaScript überschreiben oder wenn Sie eine eigene Spalte hinzufügen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/bc/6.0/subitems-table-options.md

On this page

This page is a translation. Read the English original

Die Liste der Unterelemente: Einstellungen und ihre Spalten

Lesen Sie diese Seite, wenn Ihre Redakteure die Liste der Unterelemente in der Administration verwenden, wenn Sie children_detailed.tpl oder dessen JavaScript überschreiben oder wenn Sie eine eigene Spalte hinzufügen möchten. In Exponential 6.0.15 bieten die Einstellungen (Table options) der Liste unter jedem Knoten (content/view/full/<node id>) einen Katalog von mehr als hundert Spalten statt 15 fester, gruppiert, auf dem Server sortierbar, umsortierbar, mit Vorgaben und CSV-Export. Ein Website-Entwickler fügt eine Spalte mit ein paar Zeilen INI und einer PHP-Funktion oder einem Template hinzu.

Alles, was eine Spalte zeigt, wird auf dem Server berechnet, nur für die Spalten, die der Benutzer sichtbar gemacht hat, und nur für die Zeilen der Seite auf dem Bildschirm. Eine Spalte, die der Benutzer nicht sehen darf (ihr Policy[]), wird nicht angeboten, nicht berechnet und nicht gesendet.

Kurz gesagt

Was sich geändert hatNeuer Spaltenkatalog settings/subitemscolumns.ini (129 Spalten), neue Einstellungen in settings/subitems.ini (PageSizes[], CSVLimit, ...), Server-Funktionen hinter der Liste, die Wahl des Benutzers auf dem Server gespeichert, pro Bereich der Administration. Das alte Cookie eZSubitemColumns wird einmal übernommen.
Wer betroffen istOverrides von children_detailed.tpl in admin oder admin4 und des JavaScripts der Liste: Sie behalten die klassischen 15 Spalten. Installationen, deren ezjscore.ini die neuen Server-Funktionen fehlen, fallen ebenfalls auf die klassische Liste zurück.
Wie Sie es prüfenphp vendor/bin/phpunit tests/tests/kernel/classes/subitems/
Wie Sie es behebenFühren Sie Ihre Overrides mit den ausgelieferten Templates zusammen; halten Sie ezjscore.ini aktuell. Um eine Spalte hinzuzufügen, folgen Sie Eine Spalte in 3 Minuten hinzufügen.

Was Benutzer sehen

Einstellungen (die Schaltfläche über der Liste) enthält:

  • Anzahl der Elemente pro Seite: 10, 25, 50, 100 (subitems.ini [SubitemsSettings] PageSizes[]) oder eine eigene Zahl.
  • Spalte suchen: ein Filterfeld; geben Sie einen Teil eines Namens ein („Alias“, „Anzahl“), und nur die passenden Spalten bleiben in der Liste.
  • Die Spalten nach Gruppe: Grunddaten, Knoten, Objekt, Version, Ort, URLs, SEO, Zeitangaben, Personen, Verknüpfungen, Übersetzungen, Workflow, Benutzer, Medien, Technisch, Individuell, und eine Gruppe „Attribute: <Klasse>“ pro Klasse unter den Unterelementen. Ein Kontrollkästchen pro Spalte; die Beschreibung der Spalte ist ihr Tooltip.
  • Reihenfolge der sichtbaren Spalten: Ziehen Sie eine Spalte, um sie zu verschieben, oder verwenden Sie ihre Pfeiltasten.
  • Spaltenvorgaben: Wählen Sie eine (SEO, Redaktionell, Technisch, Übersetzungen werden mit dem System ausgeliefert), Aktuelle speichern als..., um die aktuellen Spalten unter einem eigenen Namen zu behalten, Vorgabe löschen für Ihre eigenen.
  • CSV exportieren: lädt jedes Unterelement (bis zu CSVLimit) mit den sichtbaren Spalten in ihrer Reihenfolge herunter.

In der Tabelle selbst sortiert ein Klick auf den Kopf einer sortierbaren Spalte die Liste danach, auf dem Server (sodass die Reihenfolge über Seiten hinweg stimmt). Eine Zelle einer mit Copy=true gekennzeichneten Spalte (IDs, Pfade, URLs, der Seitentitel ...) kopiert ihren Wert bei einem Klick und meldet „Kopiert“.

Die Wahl wird für den Benutzer gespeichert, pro Bereich der Administration (der Inhaltsbaum, die Medien-Bibliothek und die Benutzer behalten ihre eigene), auf dem Server: Sie folgt dem Benutzer in jeden Browser. Die früher im Cookie eZSubitemColumns gewählten Spalten werden beim ersten Mal übernommen.

Die Liste funktioniert so in jedem Admin-Design: admin und admin4 haben ihr eigenes children_detailed.tpl, die anderen Admin-Designs (admin2, admin3, sevenx_site_admin) verwenden das des Designs, auf das sie zurückfallen. Ohne die Server-Funktionen (eine alte ezjscore.ini) fällt sie auf die klassischen 15 Spalten zurück.

Der Spaltenkatalog

129 Spalten werden in settings/subitemscolumns.ini ausgeliefert; dazu kommen die automatischen Attributspalten (siehe unten). „Sortierung“ nennt das Feld, nach dem die Liste sortiert, wenn der Kopf angeklickt wird (leer: nicht sortierbar); „Richtlinie“ die Funktionen, die ein Benutzer braucht, damit ihm die Spalte überhaupt angeboten wird. „Art“ ist, wie der Wert entsteht: eingebaut (wie bisher von der Liste aus dem Knoten gerendert), eine Klasse und ihr Field=, ein Handler oder ein Template. Name und Beschreibung stehen hier so, wie die deutsche Administration sie zeigt.

GruppeSpalten
Grunddaten5 (eingebaut)
Knoten16 (2 eingebaut)
Objekt14 (3 eingebaut)
Version7
Ort5
URLs10
SEO5
Zeitangaben10 (2 eingebaut)
Personen5 (1 eingebaut)
Verknüpfungen6
Übersetzungen6 (1 eingebaut)
Workflow12 (1 eingebaut)
Benutzer9
Medien12
Technisch4
Individuell3

Grunddaten (5)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
thumbnailMiniaturansichteingebautEine kleine Vorschau des Bildes des Elements oder das Symbol seiner Klasse.
nameNameeingebautDer Name des Elements, verlinkt mit seiner Seite in der Administration.name
visibilitySichtbarkeiteingebautSichtbar, Versteckt oder Versteckt durch übergeordneten Eintrag.visibility
typeTypeingebautDer Name der Inhaltsklasse des Elements.class_name
priorityPrioritäteingebautDie Priorität unter dem übergeordneten Element; direkt änderbar, wenn dieses nach Priorität sortiert.priority

Knoten (16)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
nodeidKnoten IDeingebautDie ID des Ortes (Knotens).node_id
noderemoteidKnoten remote IDeingebautDie Remote-ID des Ortes, gleich in allen Installationen.
parentnodeidKnoten-ID des übergeordneten ElementsexpSubitemsNodeColumn parent_node_idDie Knoten-ID des übergeordneten Ortes des Elements.
depthTiefeexpSubitemsNodeColumn depthWie tief der Ort im Baum liegt (die Inhaltswurzel ist 1).depth
pathstringPfad aus Knoten-IDsexpSubitemsNodeColumn path_stringDie Knoten-IDs von der Spitze des Baums bis zum Element: /1/2/89/120/.path
pathidentificationPfad aus BezeichnernexpSubitemsNodeColumn path_identificationDer Pfad des Ortes als Bezeichner (ezcontentobject_tree.path_identification_string).path_string
mainnodeidKnoten-ID des HauptortesexpSubitemsNodeColumn main_node_idDie Knoten-ID des Hauptortes des Objekts (gleich der Knoten-ID, wenn er es ist).
childsortfieldUnterelemente sortiert nachexpSubitemsNodeColumn sort_fieldWie das Element seine eigenen Unterelemente sortiert: Veröffentlicht, Name, Priorität, Geändert ...
childsortorderSortierrichtung der UnterelementeexpSubitemsNodeColumn sort_orderAufsteigend oder absteigend, für die eigenen Unterelemente des Elements.
hiddenVerborgenexpSubitemsNodeColumn is_hiddenVon einem Redakteur versteckt: das Element selbst wurde versteckt (nicht eines seiner übergeordneten).
invisibleUnsichtbarexpSubitemsNodeColumn is_invisibleBesuchern nicht gezeigt: selbst versteckt oder unter einem versteckten Ort.visibility
iscontainerBehälterexpSubitemsNodeColumn is_containerOb die Klasse des Elements Unterelemente haben kann.
childrencountAnzahl der UnterelementeexpSubitemsNodeColumn children_countDie direkten Unterelemente, die Sie lesen dürfen. Eine Zählabfrage je Zeile.
subtreecountGröße des TeilbaumsexpSubitemsNodeColumn subtree_countJedes Element darunter, in allen Tiefen, das Sie lesen dürfen. Eine Zählabfrage je Zeile über den ganzen Teilbaum: langsamer bei großen Bäumen.
childclassesKlassen der UnterelementeexpSubitemsNodeColumn child_classesDie Klassen der direkten Unterelemente mit ihrer Anzahl, die häufigste zuerst. Eine gruppierte Abfrage je Zeile; zählt jedes Unterelement.
newestchildnameNeuestes UnterelementexpSubitemsNodeColumn newest_child_nameDer Name des zuletzt veröffentlichten Unterelements, das Sie lesen dürfen. Eine begrenzte Abfrage je Zeile.

Objekt (14)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
sectionSektioneingebautDer Name der Sektion des Elements.section
objectidObjekt IDeingebautDie ID des Inhaltsobjekts.contentobject_id
objectremoteidObjekt remote IDeingebautDie Remote-ID des Inhaltsobjekts, gleich in allen Installationen.
classidentifierKlassen BezeichnerexpSubitemsObjectColumn class_identifierDer Bezeichner der Klasse des Elements, wie Templates und Fetches ihn verwenden.class_identifier
classidKlassen-IDexpSubitemsObjectColumn class_idDie ID der Klasse des Elements.
classgroupsKlassengruppenexpSubitemsObjectColumn class_groupsDie Klassengruppen, zu denen die Klasse des Elements gehört (eine Abfrage je Klasse, nicht je Zeile).
sectionidentifierSektionsbezeichnerexpSubitemsObjectColumn section_identifierDer Bezeichner der Sektion des Elements (sortiert wird nach Sektions-ID).section
sectionidSektions-IDexpSubitemsObjectColumn section_idDie ID der Sektion des Elements.section
wordcountWortanzahlexpSubitemsObjectColumn word_countWörter im Haupttext: das erste von body, description, intro, short_description, sonst der erste Rich-Text-, XML- oder Textblock mit Inhalt. Liest die Data Map.
textlengthTextlängeexpSubitemsObjectColumn text_lengthZeichen im Haupttext, ohne Auszeichnung. Liest die Data Map.
readingtimeLesezeitexpSubitemsReadingTimeColumnMinuten, die ein Leser für den Haupttext braucht (siehe Wortanzahl), bei WordsPerMinute Wörtern je Minute. Liest die Data Map.
namelengthLänge des NamensexpSubitemsObjectColumn name_lengthZeichen im Namen des Elements.
ratingBewertungexpSubitemsRelationColumn ratingDie durchschnittliche Sternebewertung (braucht die Extension ezstarrating); leer, wenn nie bewertet.
ratingcountBewertungenexpSubitemsRelationColumn rating_countWie viele Sternebewertungen abgegeben wurden (braucht die Extension ezstarrating).

Version (7)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
versionObjektversionexpSubitemsVersionColumn versionDie Nummer der aktuellen (veröffentlichten) Version.
versioncountVersionenexpSubitemsVersionColumn version_countJede gespeicherte Version: veröffentlicht, archiviert, Entwürfe und die übrigen.
draftcountEntwürfeexpSubitemsVersionColumn draft_countOffene Entwürfe, die noch nicht veröffentlicht sind.
draftauthorsAutoren der EntwürfeexpSubitemsVersionColumn draft_authorsWer einen offenen Entwurf des Elements hat.
latestdraftNeuester EntwurfexpSubitemsVersionColumn latest_draftWann der neueste offene Entwurf zuletzt geändert wurde.
archivedcountArchivierte VersionenexpSubitemsVersionColumn archived_countFrühere Versionen, die im Verlauf aufbewahrt werden.
versioncreatedVersion angelegtexpSubitemsVersionColumn version_createdWann die aktuelle Version begonnen wurde (Geändert sagt, wann sie veröffentlicht wurde).

Ort (5)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
parentnameÜbergeordnetes ElementexpSubitemsNodeColumn parent_nameDer Name des übergeordneten Ortes (einmal je Seite geladen).
ismainHauptortexpSubitemsNodeColumn is_mainOb dies der Hauptort des Objekts ist.
locationcountOrteexpSubitemsURLColumn location_countWie viele Orte das Objekt hat. Eine Abfrage je Zeile.
otherlocationsWeitere PositionenexpSubitemsURLColumn other_locationsDie URL-Aliase der weiteren Orte des Objekts.
mainlocationPfad des HauptortesexpSubitemsURLColumn main_locationDer URL-Alias des Hauptortes, wenn diese Zeile nicht er ist.

URLs (10)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
urlaliasURL-AliasexpSubitemsURLColumn url_aliasDer URL-Alias des Elements, wie die Administration ihn verwendet (der Pfad ab der Inhaltswurzel); / für den Knoten an der Wurzel der Site.path_string
allaliasesAlle URL-AliaseexpSubitemsURLColumn all_aliasesJeder eigene URL-Alias des Elements, in allen seinen Sprachen (/ ist die Wurzel der Site). Teilt die Alias-Abfrage mit den anderen Alias-Spalten.
systemurlSystem-URLexpSubitemsURLColumn system_urlcontent/view/full/<node id>: die Adresse, die immer funktioniert, gleich welche Aliase es gibt.
publicpathÖffentlicher PfadexpSubitemsURLColumn public_pathDer Pfad, den Besucher im öffentlichen Siteaccess verwenden: der URL-Alias ohne den PathPrefix dieses Siteaccess.
publicurlÖffentliche URLexpSubitemsURLColumn public_urlDie vollständige Adresse auf der öffentlichen Site: die SiteURL des öffentlichen Siteaccess und der öffentliche Pfad.
urlslugURL-KürzelexpSubitemsURLColumn url_slugDas letzte Element des URL-Alias.
aliascountURL-AliaseexpSubitemsURLColumn alias_countDie eigenen URL-Aliase des Elements, normalerweise einer je Übersetzung. Eine Abfrage je Zeile, geteilt mit den anderen Alias-Spalten.
customaliasesEigene URL-AliaseexpSubitemsURLColumn custom_aliasesDie zusätzlichen Aliase, angelegt unter URL-Aliase verwalten.
customaliascountAnzahl eigener URL-AliaseexpSubitemsURLColumn custom_alias_countWie viele zusätzliche Aliase unter URL-Aliase verwalten angelegt wurden.
historycountAlte URLsexpSubitemsURLColumn history_countFrühere Adressen (nach Umbenennen und Verschieben), die noch auf das Element weiterleiten.

SEO (5)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
pagetitleSeitentitel im BrowserexpSubitemsSEOColumn page_titleDer Titel der öffentlichen Site für die Seite des Elements, ermittelt wie ihr Pagelayout es tut, ohne die Seite zu erzeugen.
titlelengthLänge des SeitentitelsexpSubitemsSEOColumn title_lengthZeichen im Seitentitel; Suchmaschinen zeigen etwa 60.
metatitleMeta-TitelexpSubitemsSEOColumn meta_titleDer Titel im Metadaten-Attribut des Elements (xrowmetadata); leer, wenn keiner gesetzt ist.
metadescriptionMeta-BeschreibungexpSubitemsSEOColumn meta_descriptionDie Beschreibung im Metadaten-Attribut des Elements (xrowmetadata).
metakeywordsMeta-SchlüsselwörterexpSubitemsSEOColumn meta_keywordsDie Schlüsselwörter im Metadaten-Attribut des Elements (xrowmetadata).

Zeitangaben (10)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
modifiedGeänderteingebautWann die aktuelle Version veröffentlicht wurde.modified
publishedVeröffentlichteingebautWann das Element zum ersten Mal veröffentlicht wurde.published
modifiedsubnodeTeilbaum geändertexpSubitemsNodeColumn modified_subnodeWann sich zuletzt etwas im Teilbaum des Elements geändert hat.modified_subnode
publishedageVeröffentlicht (vor)expSubitemsDateColumn published_ageWie lange die erste Veröffentlichung des Elements zurückliegt: vor 3 Tagen.published
modifiedageGeändert (vor)expSubitemsDateColumn modified_ageWie lange die Veröffentlichung der aktuellen Version zurückliegt.modified
dayssincepublishedTage seit VeröffentlichungexpSubitemsDateColumn days_since_publishedGanze Tage seit der ersten Veröffentlichung des Elements.published
dayssincemodifiedTage seit ÄnderungexpSubitemsDateColumn days_since_modifiedGanze Tage seit der Veröffentlichung der aktuellen Version.modified
publishedisoVeröffentlicht (ISO 8601)expSubitemsDateColumn published_isoDie Veröffentlichungszeit als 2026-10-02T09:30:00+00:00, zum Kopieren.published
modifiedisoGeändert (ISO 8601)expSubitemsDateColumn modified_isoDie Änderungszeit als 2026-10-02T09:30:00+00:00, zum Kopieren.modified
newestchildNeuestes Unterelement veröffentlichtexpSubitemsNodeColumn newest_childWann das zuletzt veröffentlichte Unterelement, das Sie lesen dürfen, veröffentlicht wurde. Eine begrenzte Abfrage je Zeile.

Personen (5)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
modifierBearbeitereingebautWer die aktuelle Version veröffentlicht hat.
ownerEigentümerexpSubitemsObjectColumn ownerDer Benutzer, der das Objekt angelegt hat (sein Eigentümer).
owneridEigentümer-IDexpSubitemsObjectColumn owner_idDie Objekt-ID des Eigentümers.
initialcreatorErster AutorexpSubitemsVersionColumn initial_creatorWer die erste noch gespeicherte Version geschrieben hat.
contributorsMitwirkendeexpSubitemsVersionColumn contributorsAlle, die eine Version geschrieben haben, in der Reihenfolge ihrer ersten Version.

Verknüpfungen (6)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
relatedcountVerknüpfte ObjekteexpSubitemsRelationColumn related_countObjekte, mit denen das Element verknüpft ist (alle Verknüpfungsarten). Eine Zählabfrage je Zeile.
relatednamesNamen der verknüpften ObjekteexpSubitemsRelationColumn related_namesDie Namen der ersten verknüpften Objekte, die Sie lesen dürfen, nach Namen.
reverserelatedcountRückwärts verknüpfte ObjekteexpSubitemsRelationColumn reverse_related_countObjekte, die mit dem Element verknüpft sind: was ins Leere zeigen würde, wenn es entfernt würde. Eine Zählabfrage je Zeile.
reverserelatednamesNamen der rückwärts verknüpften ObjekteexpSubitemsRelationColumn reverse_related_namesDie Namen der ersten Objekte, die mit dem Element verknüpft sind und die Sie lesen dürfen.
tagsSchlagwörterexpSubitemsRelationColumn tagsDie Tags des Elements (braucht die Extension eztags und ein Tags-Attribut).
tagcountAnzahl der TagsexpSubitemsRelationColumn tag_countWie viele Tags das Element hat (braucht die Extension eztags).

Übersetzungen (6)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
translationsÜbersetzungeneingebautDie Flaggen der Sprachen, in die das Element übersetzt ist.
initiallanguageUrsprungsspracheexpSubitemsObjectColumn initial_languageDie Sprache, in der das Element zuerst geschrieben wurde.
languagecountSprachenexpSubitemsObjectColumn language_countIn wie viele Sprachen das Element übersetzt ist.
languagecodesSprachcodesexpSubitemsObjectColumn language_codesDie Locales der Übersetzungen, z. B. eng-GB, ger-DE.
missingtranslationsFehlende ÜbersetzungenexpSubitemsObjectColumn missing_translationsDie Sprachen der Installation, in die das Element nicht übersetzt ist.
alwaysavailableImmer verfügbarexpSubitemsObjectColumn always_availableIn jeder Sprache gezeigt, auch in denen ohne Übersetzung.

Workflow (12)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
objectstateObjektstatuseingebautDie Objektzustände des Elements, als Bezeichner Gruppe/Zustand.
statusbadgeStatusTemplateEin Abzeichen: Sichtbar, Versteckt, Durch übergeordnetes Element versteckt oder Gesperrt (eine Template-Spalte).
lockedGesperrtexpSubitemsObjectColumn lockedIm Zustand „locked“ der Zustandsgruppe Lock (ez_lock).
pendingcountAusstehende VersionenexpSubitemsVersionColumn pending_countVersionen, die in einem Workflow warten, etwa einer Freigabe.
rejectedcountAbgelehnte VersionenexpSubitemsVersionColumn rejected_countVersionen, die ein Freigebender abgelehnt hat.
workflowprocessesWorkflow-ProzesseexpSubitemsVersionColumn workflow_processesWorkflow-Prozesse, die für das Element laufen (eine Freigabe, eine verzögerte Veröffentlichung). Eine Zählabfrage je Zeile.
caneditSie können bearbeitenexpSubitemsPermissionColumn can_editOb Sie das Element bearbeiten dürfen.
canremoveSie können entfernenexpSubitemsPermissionColumn can_removeOb Sie das Element entfernen dürfen.
canmoveSie können verschiebenexpSubitemsPermissionColumn can_moveOb Sie das Element verschieben dürfen.
canhideSie können versteckenexpSubitemsPermissionColumn can_hideOb Sie das Element verstecken und wieder anzeigen dürfen.
cantranslateSie können übersetzenexpSubitemsPermissionColumn can_translateOb Sie das Element übersetzen dürfen.
cancreateSie können darunter anlegenexpSubitemsPermissionColumn can_createOb Sie unter dem Element Inhalte anlegen dürfen; leer, wenn es kein Container ist.

Benutzer (9)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
userloginAnmeldenexpSubitemsUserColumn loginDer Anmeldename des Benutzers.role/read
useremailE-MailexpSubitemsUserColumn emailDie E-Mail-Adresse des Benutzers. Nur für Benutzer, die Rollen zuweisen dürfen.role/assign
userenabledKonto aktiviertexpSubitemsUserColumn enabledOb sich das Konto anmelden darf.role/read
userlockedAusgesperrtexpSubitemsUserColumn lockedNach zu vielen fehlgeschlagenen Anmeldungen ausgesperrt (site.ini [UserSettings] MaxNumberOfFailedLogin).role/read
userlastvisitLetzter BesuchexpSubitemsUserColumn last_visitWann der letzte Besuch des Benutzers begann; leer, wenn er sich nie angemeldet hat.role/read
userlogincountAnmeldungenexpSubitemsUserColumn login_countWie oft sich der Benutzer angemeldet hat.role/read
userfailedloginsFehlgeschlagene AnmeldungenexpSubitemsUserColumn failed_loginsFehlgeschlagene Anmeldeversuche seit der letzten erfolgreichen Anmeldung.role/assign
userrolesRollenexpSubitemsUserColumn rolesDie Rollen, die für den Benutzer gelten, direkt oder über seine Gruppen. Zwei Abfragen je Zeile.role/read
userrolecountAnzahl der RollenexpSubitemsUserColumn role_countWie viele Rollen für den Benutzer gelten.role/read

Medien (12)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
hasimageHat BildexpSubitemsMediaColumn has_imageOb das Element ein Bild hat; leer, wenn seine Klasse kein Bildattribut hat.
imagecountBilderexpSubitemsMediaColumn image_countBildattribute, die ein Bild enthalten.
imagedimensionsBildmaßeexpSubitemsMediaColumn image_dimensionsBreite x Höhe des Originalbildes, in Pixeln.
imagewidthBildbreiteexpSubitemsMediaColumn image_widthDie Breite des Originalbildes, in Pixeln.
imageheightBildhöheexpSubitemsMediaColumn image_heightDie Höhe des Originalbildes, in Pixeln.
imagesizeDateigröße des BildesexpSubitemsMediaColumn image_sizeDie Größe der Originalbilddatei (in Bytes in der CSV-Datei).
imagemimeBildtypexpSubitemsMediaColumn image_mimeDer MIME-Typ des Originalbildes.
imagealtAlternativtext des BildesexpSubitemsMediaColumn image_altDer Alternativtext des Bildes; leer, wenn es keinen hat, was sich zu beheben lohnt.
filenameDateinameexpSubitemsMediaColumn file_nameDer Name, mit dem die Datei (Binärdatei oder Medium) hochgeladen wurde.
filesizeDateigrößeexpSubitemsMediaColumn file_sizeDie Größe der gespeicherten Datei (in Bytes in der CSV-Datei).
filemimeDateitypexpSubitemsMediaColumn file_mimeDer MIME-Typ der Datei.
filedownloadsDownloadsexpSubitemsMediaColumn file_downloadsWie oft die Datei über content/download heruntergeladen wurde.

Technisch (4)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
searchwordsWörter im SuchindexexpSubitemsPermissionColumn search_wordsWortpositionen, die die eingebaute Suchmaschine für das Element indexiert hat (0: nicht indexiert). Eine Zählabfrage je Zeile; leer bei einer anderen Suchmaschine.
viewcountAufrufeexpSubitemsNodeColumn view_countIn ezview_counter gezählte Aufrufe (gefüllt vom Cronjob updateviewcount); leer, wenn nie gezählt.
languagemaskSprachmaskeexpSubitemsObjectColumn language_maskDie Sprach-Bitmaske des Objekts (Bit 0: immer verfügbar).
attributecountAttributeexpSubitemsObjectColumn attribute_countAttribute der aktuellen Version in der gezeigten Sprache. Liest die Data Map.

Individuell (3)

SchlüsselNameArtWas sie zeigtSortierungRichtlinie
teaserAnrisstextTemplateDie ersten Wörter von Einleitung, Beschreibung oder Haupttext (eine Template-Spalte).
editlinkBearbeiten-LinkHandlerDie Adresse der Bearbeitungsseite des Elements, wenn Sie es bearbeiten dürfen (eine Handler-Spalte).
daysonlineTage onlineHandlerGanze Tage seit der ersten Veröffentlichung des Elements (eine Handler-Spalte).published

Wie manche Spalten ihren Wert ermitteln

  • Seitentitel im Browser (pagetitle) ist der <title>, den die öffentliche Website für die Seite des Elements ausgibt, ermittelt aus dem Knoten und den Einstellungen des öffentlichen Siteaccess, ohne die Seite zu rendern. Der öffentliche Siteaccess ist SiteAccess= im Block, sonst site.ini [SiteSettings] DefaultAccess (auf der Referenzinstallation: site). TitleFormat= wählt die Regel des Designs, das dieser Siteaccess verwendet:

    • name (der Standard; das Media-Design, extension/sevenx_themes_media/design/media/templates/pagelayout/head/title.tpl): <page title> - <SiteName>, wobei der Seitentitel der Meta-Titel des xrowmetadata-Attributs des Elements ist, wenn es einen hat, sonst der Name des Elements; der Seitentitel allein, wenn er SiteName entspricht. Auf der Referenzinstallation ist die Medienwurzel daher „Media - Fit & Healthy“, und der Knoten der Startseite „Fit & Healthy“ ist einfach „Fit & Healthy“.
    • path (design/standard und page_head.tpl von ezwebin): die Namen des Elements und seiner Vorfahren, das Element zuerst, verbunden mit „ / “, dann „ - <SiteName>“: „Banners / Media - Bold Agency“ (das Beispiel unter „Die ausgelieferten Familien“).

    SiteName ist das [SiteSettings] SiteName des öffentlichen Siteaccess; Namen werden in seiner ersten Sprache aus SiteLanguageList[] genommen, wenn das Element sie hat. Der Wert ist der reine Text (mit &, nicht &amp;), wie der Browser ihn zeigt. Ein Meta-Titel wird so verwendet, wie er gespeichert ist; der Operator metadata() von xrowmetadata lässt Platzhalter im Stil [name] stehen, und die Spalte ebenso.

  • URL-Alias (urlalias) ist der Alias, den die Administration verwendet (url_alias des Knotens). Der Kernel antwortet in zwei Fällen mit einem leeren Alias, und die Spalte löst beide stattdessen aus der Alias-Tabelle auf, statt eine leere Zelle zu zeigen: Der Knoten, dem das Wurzelelement von ezurlalias_ml gehört (die Zeile mit Elternteil 0 und leerem Text), ist die Seite an der Wurzel der Website und zeigt /; die Inhaltswurzel ([NodeSettings] RootNode), deren pathWithNames() immer leer ist, zeigt ihren eigenen Alias, wenn das Wurzelelement einem anderen Knoten gehört. Auf der Referenzinstallation gehört das Wurzelelement dem Knoten 89 („Fit & Healthy“, die Startseite), der außerdem den benannten Alias fit-healthy hat, unter dem seine Unterelemente hängen, und Knoten 2 ist unter websites erreichbar. Alle URL-Aliase (allaliases) führt jeden eigenen Alias des Elements auf.

  • Öffentlicher Pfad / Öffentliche URL nehmen das PathPrefix des öffentlichen Siteaccess vom Alias weg (sofern PathPrefixExclude[] es nicht behält, wie urlAlias() es tut) und setzen seine SiteURL davor, mit Scheme=https, sofern SiteURL kein Schema hat.

  • Verborgen ist das Element, das ein Redakteur versteckt hat; Unsichtbar ist „Besuchern nicht gezeigt“, selbst versteckt oder unter einem versteckten Knoten. Sie unterscheiden sich für alles unter einem versteckten Knoten.

  • Anzahl der Unterelemente zählt die Unterelemente, die der aktuelle Benutzer lesen darf; Klassen der Unterelemente zählt jedes Unterelement pro Klasse (nur Zahlen, keine Namen).

  • Wortanzahl, Textlänge und Lesezeit lesen den Haupttext: das erste von body, description, intro, short_description (oder Attributes[] im Block), das ein Rich-Text-, XML- oder Textblock mit Inhalt ist, sonst überhaupt das erste solche Attribut; Markup wird weggelassen.

  • Die Spalten der Gruppe Benutzer sind für alles leer, was kein Benutzerkonto ist.

  • Bewertung und Schlagwörter brauchen die Erweiterungen ezstarrating und eztags und ein Attribut dieser Art; ohne sie sind sie leer, nie ein Fehler.

Jede Spalte liefert eine leere Zelle (null), wenn sie für die Klasse eines Elements nicht zutrifft, und hält die Liste nie an: Eine Spalte, die fehlschlägt, liefert eine leere Zelle und eine Debug-Warnung.

Eine Spalte in 3 Minuten hinzufügen

Eine Spalte ist ein Block [Column_<key>]. Legen Sie ihn in settings/override/subitemscolumns.ini.append.php ab, oder besser in einer Erweiterung: extension/<yours>/settings/subitemscolumns.ini.append.php (mit der in ActiveExtensions[] aufgeführten Erweiterung). Der Schlüssel besteht aus Kleinbuchstaben, Ziffern und _. Leeren Sie danach den INI-Cache (php bin/php/ezcache.php --clear-tag=ini); laden Sie das PHP-FPM, das die Administration ausliefert, neu, wenn eine PHP-Klasse hinzugekommen ist (und erzeugen Sie die Autoloads neu). Ein neues Template braucht außerdem ein Leeren des Template-Override-Caches (--clear-id=template-override), sonst bleibt die Zelle leer.

Die drei Beispiele unten sind die, die tests/tests/kernel/classes/subitems/columns/fixtures/subitemscolumns.ini.append.php enthält; expSubitemsGuideExamplesTest lädt diese Datei in eine Registry und berechnet die Spalten so, wie es die Server-Funktion rows tut.

1. Ein Handler: eine Funktion

[Column_mydaysonline]
Name=Days online
Group=Custom
Type=number
Handler=expSubitemsColumnHandlers::daysOnline
SortField=published
Align=right
Order=5000
Description=Whole days since the item was first published.
class expSubitemsColumnHandlers
{
    public static function daysOnline( eZContentObjectTreeNode $node, array $settings, expSubitemsColumn $column )
    {
        $object = $node->attribute( 'object' );
        $published = $object instanceof eZContentObject ? (int)$object->attribute( 'published' ) : 0;
        return $published > 0 ? expSubitemsColumn::days( $published ) : null;
    }
}

Die Funktion erhält den Knoten der Zeile, den Block als Array und das Spaltenobjekt und gibt den Wert zurück: null, einen Skalar oder eine Liste von Skalaren. Type= entscheidet, wie die Zelle und die CSV ihn zeigen (hier eine Zahl). SortField=published lässt den Kopf die Liste nach dem Veröffentlichungsdatum sortieren. Das ausgelieferte kernel/classes/subitems/columns/expsubitemscolumnhandlers.php enthält diesen und editLink.

2. Eine Klasse: eine eigene Spalte

[Column_myreadingtime]
Name=Reading time
Group=Custom
Type=number
Class=expSubitemsReadingTimeColumn
WordsPerMinute=250
Align=right
Order=5010
Description=Minutes a reader needs for the main text.
class expSubitemsReadingTimeColumn extends expSubitemsColumn
{
    public function value( eZContentObjectTreeNode $node )
    {
        $count = $this->wordCount()->value( $node );
        if ( !$count )
            return null;
        $perMinute = max( 1, (int)$this->setting( 'WordsPerMinute', 200 ) );
        return max( 1, (int)ceil( $count / $perMinute ) );
    }

    public function html( eZContentObjectTreeNode $node, $value )
    {
        return $value === null ? '' : self::escape( $value . ' ' . ezpI18n::tr( 'design/admin/node/view/full', 'min' ) );
    }

    public function prefetch( array $nodes )
    {
        $this->wordCount()->prefetch( $nodes );
    }

    protected function wordCount()
    {
        return new expSubitemsObjectColumn( $this->key, array( 'Field' => 'word_count' ) + $this->settings );
    }
}

Eine Klasse erweitert expSubitemsColumn und implementiert value(); sie kann html() (die Zelle; maskieren Sie alles mit self::escape()), text() (die CSV), sortBy(), isAvailable() und prefetch() (siehe Leistung) überschreiben. Sie liest ihre eigenen Einstellungen mit $this->setting( 'Name', $default ), sodass eine Klasse mehreren Blöcken dienen kann. Die Basisklasse hat die Formatierung, die alle Spalten teilen, zur Verwendung in value() und html(): escape(), oneLine(), markupToText(), linkHtml(), formatDate(), formatAge() („vor 3 Tagen“), days(), formatBytes() („245 kB“) und memo( $bucket, $key, $compute ) für eine Abfrage, die einmal pro Anfrage erledigt wird. Das ist die ausgelieferte Spalte readingtime (kernel/classes/subitems/columns/expsubitemsreadingtimecolumn.php).

3. Ein Template: Markup ohne PHP

[Column_mystatus]
Name=Status
Group=Custom
Type=html
Template=design:subitems/columns/statusbadge.tpl
Order=5020
Description=What visitors see of the item.
{def $exp_badge = 'visible'}
{if $node.is_hidden}{set $exp_badge = 'hidden'}
{elseif $node.is_invisible}{set $exp_badge = 'invisible'}
{elseif $node.object.state_identifier_array|contains( 'ez_lock/locked' )}{set $exp_badge = 'locked'}{/if}
{switch match=$exp_badge}
{case match='hidden'}<span class="exp-subitems-badge exp-subitems-badge-hidden">{'Hidden'|i18n( 'design/admin/node/view/full' )}</span>{/case}
...
{case}<span class="exp-subitems-badge exp-subitems-badge-visible">{'Visible'|i18n( 'design/admin/node/view/full' )}</span>{/case}
{/switch}
{undef $exp_badge}

Das Template erhält $node (die Zeile), $column (den Block als Hash: $column.Length, $column.Attributes) und $key. Seine Ausgabe ist die Zelle; sein Text ohne Tags („Sichtbar“) ist der Wert und der CSV-Text. Maskieren Sie, was Sie ausgeben (|wash). Die ausgelieferten design/standard/templates/subitems/columns/statusbadge.tpl und teaser.tpl sind beides Beispiele; teaser.tpl zeigt das Lesen von Block-Einstellungen und einen XML-Textblock.

Die ausgelieferten Familien

Die meisten ausgelieferten Spalten sind eine Klasse pro Familie, wobei Field= die Spalte wählt, sodass ein eigener Block sie mit anderen Einstellungen wiederverwenden kann (ein anderes SiteAccess= für den Seitentitel, Limit= für Namen von Verknüpfungen, Attributes[] für den Haupttext oder das Bild):

KlasseFelder
expSubitemsNodeColumnparent_node_id, parent_name, depth, path_string, path_identification, main_node_id, is_main, sort_field, sort_order, is_hidden, is_invisible, is_container, children_count, subtree_count, child_classes, newest_child, newest_child_name, modified_subnode, view_count
expSubitemsObjectColumnclass_identifier, class_id, class_groups, section_identifier, section_id, owner, owner_id, initial_language, language_count, language_codes, missing_translations, always_available, language_mask, state_identifiers, locked, word_count, text_length, name_length, attribute_count
expSubitemsVersionColumnversion, version_count, draft_count, draft_authors, latest_draft, archived_count, pending_count, rejected_count, initial_creator, contributors, version_created, workflow_processes
expSubitemsURLColumnurl_alias, all_aliases, system_url, public_path, public_url, url_slug, alias_count, custom_aliases, custom_alias_count, history_count, location_count, other_locations, main_location
expSubitemsSEOColumnpage_title, title_length, meta_title, meta_description, meta_keywords
expSubitemsDateColumnpublished_age, modified_age, days_since_published, days_since_modified, published_iso, modified_iso
expSubitemsUserColumnlogin, email, enabled, locked, last_visit, login_count, failed_logins, roles, role_count
expSubitemsMediaColumnhas_image, image_count, image_dimensions, image_width, image_height, image_size, image_mime, image_alt, file_name, file_size, file_mime, file_downloads
expSubitemsRelationColumnrelated_count, related_names, reverse_related_count, reverse_related_names, tags, tag_count, rating, rating_count
expSubitemsPermissionColumncan_edit, can_remove, can_move, can_hide, can_translate, can_create, search_words

Zum Beispiel der Titel des Siteaccess bold, nach der Pfadregel (Stil von design/standard):

[Column_pagetitle_bold]
Name=Page title (bold)
Group=SEO
Type=text
Class=expSubitemsSEOColumn
Field=page_title
SiteAccess=bold
TitleFormat=path
Copy=true
Order=701
Description=The <title> of the bold siteaccess.

Auf der Referenzinstallation zeigt das erste Unterelement der Medienwurzel dann „Banners / Media - Bold Agency“. Ein SiteAccess=, das nicht in AvailableSiteAccessList[] steht, ergibt eine leere Zelle.

Automatische Attributspalten

Mit subitems.ini [SubitemsSettings] AttributeColumns=enabled bieten die Einstellungen außerdem eine Spalte pro Attribut jeder Klasse unter den Unterelementen des Elternknotens an, in einer Gruppe „Attribute: <Klassenname>“, mit dem Schlüssel attr:<class identifier>/<attribute identifier> (eine Abfrage findet die Klassen). Der Wert ist der Titel des Attributs, sonst sein Text ohne Tags (höchstens 300 Zeichen); die Spalte sortiert, wenn der Datentyp einen Sortierschlüssel hat, und das Sortieren danach beschränkt die Liste auf diese Klasse (die Attributsortierung von subTree lässt die anderen Klassen weg; die Anzahl bleibt richtig). AttributeColumnsExcludedDataTypes[] hält Datentypen heraus (standardmäßig ezuser: sein Text enthält den Passwort-Hash), und AttributeColumnsDataTypePolicy[<datatype>]=module/function gibt den Spalten eines Datentyps eine Richtlinie.

Richtlinien

Einträge Policy[]=module/function in einem Block müssen alle gewährt sein (jede Einschränkung zählt als gewährt), sonst existiert die Spalte für diesen Benutzer nicht: nicht in den Einstellungen, nicht berechnet, nicht in den Zeilen oder der CSV, und eine gespeicherte Wahl oder Vorgabe, die sie nennt, lässt sie einfach weg. Mehrere Einträge können auch in einer Zeile, getrennt durch ;, geschrieben werden. Die Zeilen selbst beachten immer content/read: Die Liste und die CSV zeigen nur Unterelemente, die der Benutzer lesen darf, und die Funktion rows verlangt Lesezugriff auf den Elternknoten.

Die ausgelieferten Richtlinien: Die Gruppe Benutzer braucht role/read (die Personen, die die Einrichtung der Rollen sehen), und E-Mail und Fehlgeschlagene Anmeldungen brauchen role/assign. Spalten, die Namen anderer Objekte aufführen (verknüpfte Objekte), lassen diejenigen weg, die der Benutzer nicht lesen darf.

Standardwerte pro Teilbaum und Klasse

Was ein Benutzer sieht, bevor er eine eigene Wahl speichert, kommt aus subitems.ini: Der erste Block [Defaults_<id>], dessen Subtree[] den Elternknoten oder einen seiner Vorfahren enthält oder dessen ParentClassIdentifiers[] die Klasse des Elternknotens enthält, gewinnt, in der Reihenfolge der Datei; sonst DefaultColumns[]. Die ausgelieferten Blöcke behalten die früheren Standardwerte der Liste für die Medien-Bibliothek (thumbnail;name;visibility;type) und den Benutzerbaum.

[Defaults_fitness]
Subtree[]
Subtree[]=92
ParentClassIdentifiers[]
ParentClassIdentifiers[]=ng_blog
Columns[]
Columns[]=name
Columns[]=published
Columns[]=publishedage
Columns[]=pagetitle

Auf der Referenzinstallation ergibt das name, published, publishedage, pagetitle unter „Fitness“ (Knoten 92) und unter jedem Knoten darunter. Blöcke, die eine Override-Datei hinzufügt, kommen nach den ausgelieferten; um die Standardwerte der Medien-Bibliothek oder der Benutzer zu ändern, überschreiben Sie daher Columns[] von [Defaults_media] / [Defaults_users], statt einen Block für dieselbe Stelle hinzuzufügen.

Vorgaben

Blöcke [Preset_<id>] in subitems.ini (ID: a-z, 0-9, _, -) werden allen angeboten: Name= und Columns[] in Reihenfolge. Ausgeliefert: seo, editorial, technical, translations. Benutzer speichern ihre eigenen daneben („Aktuelle speichern als...“), höchstens 20, und können nicht die ID einer Vorgabe aus der INI übernehmen. Die Spalten einer Vorgabe, die der Benutzer nicht sehen darf, werden für diesen Benutzer weggelassen.

INI-Referenz

settings/subitemscolumns.ini

EinstellungBedeutung
[Column_<key>]eine Spalte; der Schlüssel wird in Vorgaben, Standardwerten, gespeicherten Wahlen und columns= verwendet
Builtin=trueeine der 15 Spalten, die die Liste selbst rendert; nur Name, Group, Order, Description, Copy, Align, Policy[] lassen sich ändern (ihre Standardwerte stehen in expSubitemsBuiltinColumn::definitions())
Class=eine Unterklasse von expSubitemsColumn, erzeugt mit (key, settings)
Handler=class::methodeine statische Methode (node, settings, column), die den Wert zurückgibt
Template=design:...tplein Template; $node, $column, $key; Ausgabe = Zelle, Text = Wert
Field=für die ausgelieferten Familienklassen: welche Spalte der Familie
Name=der Name der Spalte, übersetzt im Kontext design/admin/node/view/full
Group=Basic, Node, Object, Version, Location, URLs, SEO, Dates, People, Relations, Translations, Workflow, Users, Media, Technical, Custom; übersetzt wie Name=
Type=text, html (vertrauenswürdiges Markup), number, date, datetime, bool, link (nur http(s), // oder /), code, list, image
SortField=path, path_string, published, modified, section, depth, class_identifier, class_name, priority, name, modified_subnode, node_id, contentobject_id, visibility oder attribute:<class>/<attribute>; leer: nicht sortierbar
Policy[]Einträge module/function, die der Benutzer alle haben muss
Description=der Tooltip in den Einstellungen, übersetzt wie Name=
Copy=trueein Klick auf eine Zelle kopiert den Wert
Align=rightrechtsbündig
Order=Position in den Einstellungen und unter den Standardwerten
SiteAccess=URL- und SEO-Spalten: der öffentliche Siteaccess (leer: DefaultAccess)
Scheme=public_url: https (Standard) oder http, wenn SiteURL keines hat
TitleFormat=page_title, title_length: name oder path
Limit=Listen der Namen verknüpfter Objekte: die meisten Namen (Standard 10, höchstens 100)
Attributes[]Haupttext, Bild- und Dateifelder und das Teaser-Template: zuerst probierte Bezeichner
Length=das Teaser-Template: Zeichen
WordsPerMinute=readingtime: Wörter pro Minute (Standard 200)

settings/subitems.ini

EinstellungBedeutung
[SubitemsSettings] DefaultColumns[]die sichtbaren Spalten, wo kein [Defaults_*] passt (name;published;translations;priority)
AttributeColumns=enabled/disabled: die automatischen Attributspalten
AttributeColumnsExcludedDataTypes[]Datentypen, die nie als Attributspalten angeboten werden (ezuser)
AttributeColumnsDataTypePolicy[<datatype>]Richtlinien, die eine Attributspalte dieses Datentyps braucht (getrennt durch ;)
CSVExport=enabled/disabled: CSV exportieren und die View content/subitemsexport
CSVLimit=die meisten Zeilen, die ein Export schreibt (5000)
PageSizes[]die angebotenen Seitengrößen (10, 25, 50, 100)
[Preset_<id>] Name=, Columns[]eine Vorgabe, die alle wählen können
[Defaults_<id>] Subtree[], ParentClassIdentifiers[], Columns[]Standardwerte für eine Stelle

Die Server-API

Drei Funktionen von ezjscore, [ezjscServer_expsubitems] in extension/ezjscore/settings/ezjscore.ini (Klasse expSubitemsServerFunctions), und eine Inhaltsansicht. Jeder Aufruf braucht einen angemeldeten Benutzer mit Zugang zur Administration und Lesezugriff auf den Elternknoten; Schlüssel werden gegen die Registry geprüft, und nichts aus der Anfrage wird je als Name einer Klasse, Funktion oder eines Templates verwendet. ezjscore verpackt jede Antwort als { "error_text": "", "content": ... }.

  • ezjscore/call/expsubitems::columns::<parent>: die Spalten, die der Benutzer sehen darf (key, name, group, type, sortable, align, description, copy, builtin, order), defaults, presets (source: ini oder user), die gespeicherte preference (visible, preset, page_size, saved), page_sizes, csv_export. Auf der Referenzinstallation bietet die Medienwurzel als admin 138 Spalten an (129 aus der INI, 9 Attributspalten):

    {"key":"pagetitle","name":"Page title in the browser","group":"SEO","type":"text","sortable":false,"align":"",
     "description":"The public site's title for the item's page, worked out as its pagelayout does, without rendering the page.",
     "copy":true,"builtin":false,"order":700}
  • ezjscore/call/expsubitems::rows::<parent>::<limit>::<offset>::<sort key>::<order 0|1>[::<name filter>] mit columns=a,b,c (POST oder GET): die Antwort von ezjscnode::subtree, jedes Element mit columns: { <key>: { v: <value>, h: "<html>" } } für die angefragten nicht eingebauten Schlüssel. Der Sortierschlüssel ist ein Spaltenschlüssel, dessen Spalte sortiert, oder einer der alten Namen (published_date, modified_date, node_id ...); alles andere sortiert wie der Elternknoten. Zwei Unterelemente der Medienwurzel auf der Referenzinstallation, mit columns=parentnodeid,urlalias,pagetitle,childrencount,version,readingtime:

    {"parentnodeid":{"v":43,"h":"43"},"urlalias":{"v":"media/banners","h":"<code>media/banners</code>"},
     "pagetitle":{"v":"Banners - Fit & Healthy","h":"Banners - Fit &amp; Healthy"},"childrencount":{"v":4,"h":"4"},
     "version":{"v":1,"h":"1"},"readingtime":{"v":null,"h":""}}
    {"parentnodeid":{"v":43,"h":"43"},"urlalias":{"v":"media/clients-partners","h":"<code>media/clients-partners</code>"},
     "pagetitle":{"v":"Clients & Partners - Fit & Healthy","h":"Clients &amp; Partners - Fit &amp; Healthy"},
     "childrencount":{"v":12,"h":"12"},"version":{"v":1,"h":"1"},"readingtime":{"v":null,"h":""}}
  • ezjscore/call/expsubitems::savepreference[::<parent>], POST preference=<json> (mit dem Formular-Token): { "visible": [...], "preset": "seo"|null, "page_size": 25, "presets": { "<id>": { "name", "columns" } } }, jeder Schlüssel optional; gespeichert für den Navigationsbereich des Elternknotens.

  • content/subitemsexport/<parent>?columns=a,b,c&sort=<key>&order=0|1: die CSV (siehe unten).

PHP-Code kann dieselben Teile verwenden: expSubitemsColumnRegistry::instance() (availableColumns( $parent ), column( $key, $parent ), resolveColumns( $keys, $parent ), defaults(), presets(), sortFor()) und expSubitemsServerFunctions::columnValues( $nodes, $columns ) für die Zellen (es lädt vorab; prefetch() und cell( $column, $node ) sind die beiden Schritte für sich).

Leistung

Berechnet werden nur die sichtbaren Spalten und nur für die Zeilen der Seite (die Seitengröße), nie für den ganzen Teilbaum. Die 15 eingebauten kosten nichts zusätzlich: Sie kommen wie bisher mit dem Knoten. Die meisten anderen Spalten lesen den geladenen Knoten oder das geladene Objekt und kosten keine Abfrage.

Die übrigen laden, was sie lesen, einmal für die Seite, nicht einmal pro Zeile: Bevor eine Zelle berechnet wird, rufen die Funktion rows und der CSV-Export prefetch( $nodes ) für jede angefragte Spalte mit den Knoten der Seite auf, und die Spalte lädt ihre Daten für alle in einer Abfrage, in dasselbe Memo pro Anfrage, das ihr value() liest. Ein Vorabladen ändert nur die Zahl der Abfragen, nie einen Wert (die Tests berechnen jede Spalte auf beide Arten und vergleichen), und eines, das fehlschlägt, überlässt der Spalte einfach das Laden pro Zeile. Einmal pro Seite geladen:

DatenSpalten
Die Data Map (Attribute der aktuellen Version und Sprache)Wortanzahl, Textlänge, Lesezeit, Anzahl der Attribute, jede Bild- und Dateispalte, Seitentitel und die Meta-Spalten, Schlagwörter, die automatischen Attributspalten
VersionszeilenAnzahl der Versionen, Entwürfe, Autoren der Entwürfe, neuester Entwurf, archiviert, ausstehend, abgelehnt, erster Autor, Mitwirkende, Version erstellt
Lesbare Unterelemente pro Elternknoten (mit den Einschränkungen von content/read des Benutzers, wie childrenCount() es tut)Anzahl der Unterelemente
Unterelemente pro KlasseKlassen der Unterelemente
Zeilen der URL-AliaseAnzahl der Aliase, alle URL-Aliase, eigene Aliase, Anzahl der eigenen Aliase, Anzahl der alten URLs
Orte des ObjektsAnzahl der Orte, andere Orte
Anzahl der Verknüpfungen (alle Typen, beide Enden veröffentlicht)Anzahl der Verknüpfungen, Anzahl der Rückverknüpfungen
ZählungenWorkflow-Prozesse, Wörter im Suchindex, Aufrufzahl

Spalten einer Zeile, die dieselben Daten lesen, teilen sie sich, und Abfragen, die für jede Zeile gleich sind (der Name des Elternknotens, die Gruppen einer Klasse, eine Sektion, die Einstellungen des öffentlichen Siteaccess, der Name eines Benutzers), werden einmal pro Anfrage erledigt. Die Funktion rows und der CSV-Export leeren zuerst das Memo, sodass ein persistenter Worker nie aus einer früheren Anfrage antwortet. Unter MongoDB werden die gruppierten Abfragen übersprungen, und die Spalten laden pro Zeile. Weiterhin pro Zeile: Größe des Teilbaums (eine Zählung über jeden ganzen Teilbaum), Neuestes Unterelement, die auf URL-Aliasen basierenden Spalten für den seltenen Knoten, dessen Alias der Kernel leer lässt, die Benutzerspalten und Anrisstext (er rendert einen XML-Textblock); behalten Sie die schweren für kleine Seiten.

Eine Familienklasse (expSubitemsFieldColumn) führt in prefetchSets() auf, welche Werte von Field= welchen Satz lesen, und hat für jeden ein prefetch<Set>( $nodes ); eine eigene Spaltenklasse überschreibt prefetch().

Gemessen auf der Referenzinstallation (SQLite, als admin, auf der Kommandozeile; Median aus 5 Läufen, jeder in einem frischen Prozess): jede der 114 nicht eingebauten Spalten auf einmal, für die ersten 10 Unterelemente der Medienwurzel und für die ersten 50 und 100 Knoten des Inhaltsbaums.

ZeilenAbfragenZeitZeit ohne Anrisstext und Größe des Teilbaums
10130 (229 vor dem Vorabladen der Seite)186 ms (264 ms)107 ms (135 ms)
50814 (1353)1,6 s (1,9 s)558 ms (714 ms)
1001671 (2759)3,2 s (3,4 s)1,27 s (1,32 s)

CSV-Export

CSV exportieren in den Einstellungen, oder content/subitemsexport/<parent node id>?columns=a,b,c&sort=<key>&order=0|1: jedes Unterelement, das der Benutzer lesen darf (bis zu CSVLimit, jeweils 100 auf einmal geholt), die angegebenen Spalten (ohne columns=: die gespeicherte Wahl des Benutzers, sonst die Standardwerte), in Reihenfolge; die Kopfzeile enthält die Spaltennamen. UTF-8 mit BOM, durch Kommas getrennt, CRLF; Zellen, die mit =, +, - oder @ beginnen, erhalten ein führendes ', damit eine Tabellenkalkulation sie nicht ausführt. Eingebaute Spalten sind enthalten (außer der Miniaturansicht), Listen werden mit , verbunden, Daten als Y-m-d H:i:s geschrieben, boolesche Werte als 1/0, Größen in Bytes. Die Datei ist nach dem Elternknoten benannt. CSVExport=disabled entfernt die Schaltfläche und die View.

Wo die Wahl gespeichert wird

Die Wahl des Benutzers ist ein Wert von eZPreferences, admin_subitems_table, ein kompaktes JSON-Dokument:

{"v":1,"parts":{"ezcontentnavigationpart":{"visible":["name","urlalias","pagetitle"],"preset":null}},
 "page_size":25,"presets":{"mine":{"name":"Mine","columns":["name","nodeid"]}}}

Die sichtbaren Spalten und die gewählte Vorgabe werden pro Navigationsbereich gehalten (*, wenn ohne Elternknoten gespeichert), die Seitengröße und die eigenen Vorgaben einmal. Sie bleiben auf jeder Datenbank unter 4000 Bytes (die Grenze von Oracle); eine Wahl, die nicht passt, wird abgelehnt, nicht abgeschnitten. Die alte Benutzereinstellung für Zeilen pro Seite (admin_list_limit) wird weiterhin verwendet, solange keine Seitengröße gespeichert wurde.

Wo der Code liegt

WasWo
Die Basisklasse der Spalten, die gemeinsame Formatierung, das Memo und das Vorabladen der Data Mapkernel/classes/subitems/expsubitemscolumn.php (expSubitemsColumn)
Registry, eingebaute Spalten, Wrapper für Handler/Template/Attribute, Benutzereinstellung, Server-Funktionen, CSVkernel/classes/subitems/*.php
Die ausgelieferten Spaltenklassenkernel/classes/subitems/columns/*.php (expSubitemsFieldColumn ist die Basis der Familien: Field=, prefetchSets(), die Hilfsfunktion für gruppierte Zählungen)
Der Spaltenkatalogsettings/subitemscolumns.ini
Standardwerte, Vorgaben, CSV, Attributspaltensettings/subitems.ini
Die Template-Spaltendesign/standard/templates/subitems/columns/*.tpl
Die Tabelle und die Einstellungendesign/<admin design>/javascript/ezajaxsubitems_expdatatable.js, design/<admin design>/templates/children_detailed.tpl, extension/expui/design/standard/javascript/exp/datatable.js
Die CSV-Viewkernel/content/subitemsexport.php

Tests

php vendor/bin/phpunit tests/tests/kernel/classes/subitems/            # everything (100 tests)
php vendor/bin/phpunit tests/tests/kernel/classes/subitems/columns/    # the catalogue and the prefetch (64 tests)

Die Tests des Katalogs starten den Kernel im Admin-Siteaccess mit der eigenen Datenbank der Installation und prüfen jede Spalte gegen echte Knoten: die Inhaltswurzel, die Medienwurzel, die Benutzerwurzel, den Benutzer admin und Knoten, die nach ihrem Inhalt gefunden werden (ein Bild, eine Datei, Schlagwörter, ein XML-Text, Verknüpfungen, eine Bewertung). Sie prüfen, dass jeder Block sich bauen lässt, eine bekannte Gruppe, einen bekannten Typ und ein bekanntes Feld nennt, dass sein Sortierfeld akzeptiert wird, dass jede Spalte für vier sehr verschiedene Knoten einen JSON-sicheren Wert und einzeiligen CSV-Text liefert, dass Spalten, die nicht zutreffen, null liefern, dass Richtlinien über die Verfügbarkeit entscheiden, dass kein Knoten je einen leeren URL-Alias zeigt, und die drei ausgearbeiteten Beispiele oben. expSubitemsPrefetchTest berechnet jede Spalte (und die Attributspalten) für Seiten unter der Inhalts-, Medien- und Benutzerwurzel einmal Zeile für Zeile und einmal mit dem Vorabladen der Seite, als admin und als anonym, und verlangt dieselben Zellen; und dass die Zeilen der vorab geladenen Spalten nach dem Vorabladen keine Abfrage brauchen. Ein Test, der Daten braucht, die die Datenbank nicht hat, wird übersprungen, nicht als fehlgeschlagen gewertet.

Verwandte Seiten

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x