Home / Forum / Eigenes Template verlinken (kein Override-tpl)

Eigenes Template verlinken (kein Override-tpl)

Um Zugang zu den Foren zu erhalten, müssen Sie angemeldet sein

Autor Nachricht

christian albert

Registriert seit: 28.07.2006

Beiträge: 7

Freitag, 28. Juli 2006 14:34:25

Hallo,

ich möchte gern ein eigene Template mit Inhalt erstellen und verlinken.
Das Template soll aber kein Override-Template sein...

Das Template soll übrigens eine eigene Sektion werden für eine bestimmte
User-Gruppe.

Danke im voraus,
Chrs

Thomas Nunninger

Thomas  Nunninger

Registriert seit: 10.01.2006

Beiträge: 52

Freitag, 28. Juli 2006 15:06:28

... was deine genaue Frage ist?

Danke und einen schönen Tag

Thomas

christian albert

Registriert seit: 28.07.2006

Beiträge: 7

Freitag, 28. Juli 2006 15:13:11

...wie erstelle ich eine Unterseite, welche ich dann verlinken kann und welche eine eigene Sektion sein kann?

Als Beispiel:

Wenn sich ein User, welcher z.B. in der Autoren-Gruppe ist, ganz normal einloggt, soll dieser über einen Link einen Artikel hinzufügen. Dafür benötige ich ein extra Template, welches das Formular usw. für die Artikeleingabe beinhaltet.

Wo lege ich das Template an? Wie verlinke ich das?

Thomas Nunninger

Thomas  Nunninger

Registriert seit: 10.01.2006

Beiträge: 52

Freitag, 28. Juli 2006 17:07:24

Du könntest z.B. erst einmal ein kleines Template erstellen. Dieses Template überprüft, ob der Benutzer am aktuellen Platz Objekte einer spezielle Klasse anlegen. (Das ist über $node.can_create und fetch( content, can_instantiate_class_list, ...) realisierbar.) Außerdem erzeugt das Template - sofern der Benutzer Objekte anlegen darf - ein Formular, das dem Benutzer angezeigt wird. Mehr macht das Template nicht. Ablegen kannst du das Template dann z.B. als design/{dein_siteaccess}/templates/neue_artikel_anlegen.tpl.

Nun bindest du mittels {include...} das Template überall dort ein, wo das Formular erscheinen (können) soll. Z.B. in pagelayout.tpl wenn es auf jeder Seite erscheinen soll, oder nur in z.B. design/{dein_siteaccess}/override/templates/full/folder.tpl. Wenn du es richtig machst, kannst du das Template überall einbinden und es erscheint trotzdem nur, wenn der Benutzer die entsprechenden Rechte besitzt.

Wenn noch Fragen sind, melde dich nochmal.

Einen schönen Tag und viel Erfolg

Thomas

christian albert

Registriert seit: 28.07.2006

Beiträge: 7

Montag, 31. Juli 2006 12:37:14

Hallo,

danke für deine Antwort. Der Include-Befehl ist mir bereits bekannt. Das eigentliche Problem ist aber nicht das Anzeigen eines Templates als Include in einem anderen, sondern das Anzeigen des Templates als einziges im Content Bereich. Sozusagen als eigene "Leer"-Seite, unabhängig von einer Klasse bzw. eines anderen Templates.

Zweites:
Die Klassen-Gruppe namens Texte, für die Artikel usw., hat die ID 5. Demnach müsste ich alle verfügbaren Klassen-Gruppen für den User mit Hilfe von {def $classes=fetch( 'content', 'can_instantiate_class_list', hash( 'group_id', 5 )} und der dazugehörigen foreach Schleife anzeigen lassen oder? Das hat bei mir nicht geklappt. Mein erster Gedanke war dort: Wie verknüpfe ich den User, welcher in der User-Gruppe "Autoren" steht, mit der Klasse "Artikel", welche in der Klassen-Gruppe "Texte" steht, bzw. weise ihm die nötigen Zugriffsrechte zu? Ist da eine neue Richtlinie nötig? Ich habe in der Administration leider keine Möglichkeit dafür gefunden.

Danke und Grüße,
Christian

Thomas Nunninger

Thomas  Nunninger

Registriert seit: 10.01.2006

Beiträge: 52

Montag, 31. Juli 2006 13:47:31

Hi Christian,

> Das eigentliche Problem ist aber nicht das Anzeigen eines Templates
> als Include in einem anderen, sondern das Anzeigen des Templates
> als einziges im Content Bereich. Sozusagen als eigene "Leer"-Seite,
> unabhängig von einer Klasse bzw. eines anderen Templates.

Dann überschreibe doch für den Bereich, wo du es haben willst, pagelayout.tpl. Dies enthält dann nichts anderes als das gewünschte Template (Ausgabe von module result) - oder direkt den gewünschten Code. Eventuell musst du das über ein neues View regeln, z.B. content/view/{edit_oder_was_auch_immer}/{node_id}, um eine entsprechende Regel in override.ini.append.php zu erzeugen.

> Die Klassen-Gruppe namens Texte, für die Artikel usw., hat die
> ID 5. Demnach müsste ich alle verfügbaren Klassen-Gruppen für
> den User mit Hilfe von
> {def $classes=fetch( 'content', 'can_instantiate_class_list', hash( 'group_id', 5 )}
> und der dazugehörigen foreach Schleife anzeigen lassen oder?

Verstehe ich das richtig, dass du eine neue Klassengruppe angelegt hast (neben Content, User, Media, Setup)? Was gibt denn {$classes|attribute( 'show' )} aus?

> Mein erster Gedanke war dort: Wie verknüpfe ich den User, welcher in der User-Gruppe
> "Autoren" steht, mit der Klasse "Artikel", welche in der Klassen-Gruppe "Texte" steht,
> bzw. weise ihm die nötigen Zugriffsrechte zu?

Du solltest eine neue User-Gruppe erstellen (oder die Editor-Gruppe anpassen). Die Policies der Gruppe müssen dann das Erzeugen der dort vorhandenen Klassen erlauben. (Das wird aber wohl nicht auf Ebene der Klassengruppe funktionieren, sondern indem du die entsprechenden Klassen auswählst.) Dem entsprechenden Editor weist du dann die Gruppe zu.

>Ist da eine neue Richtlinie nötig? Ich habe in der Administration leider keine
> Möglichkeit dafür gefunden.

-> User accounts - bietet dir die Möglichkeit, User und Gruppen zu verwalten
-> Setup -> Roles and policies - dient dem Erstellen von Policies und zuweisen von Rollen zu User Gruppen bzw. Usern. (Ist auch von -> User accounts erreichbar).

Wenn weitere Fragen bestehen, melde dich nochmal.

Einen schönen Tag

Thomas

christian albert

Registriert seit: 28.07.2006

Beiträge: 7

Montag, 31. Juli 2006 16:40:18

Hallo Thomas,

Ich besitze also die Benutzer-Gruppe "Autoren", sowie die gleichnamige Rollen-Gruppe "Autoren". Anbei gibt es einen angelegten User, welcher sich in der Benutzer-Gruppe "Autoren" befindet und mit der Rollen-Gruppe "Autoren" verknüpft ist. Die Rollen-Gruppe "Autoren" hat bisher (mehr oder weniger zum Test) Zugriff auf den Folder bzw. die Section "Autoren" (read) - das funktioniert auch gut mit dem Login usw..
Ich habe jetzt die Benutzer-Gruppe "Autoren" mit der "Autoren"-Rolle verknüpft und der "Autoren"-Rolle zzgl. die Richtlinie für die Klasse "Autoren" hinzugefügt (Class = Autoren, Section = All, Parent Class = Autoren, ParentDepth = Alle) einen Knoten habe ich nicht hinzugefügt, wüsste im Moment nicht wofür das gut sein soll. Soweit richtig?

Soviel zu der Verknüpfung mit der Klasse.
Zu dem Template:

Es geht also nicht auf einfachen Wege, wie z.B. ein Template (zb. artikel_eintragen.tpl) mit simplen Text und eventuellen Funktionen zu erstellen und dieses unter standard/templates/content/view abzulegen und das ganze dann über localhost/publish/index.php/content/view/artikel_eintragen irgendwie aufzurufen? So einfach stell ich mir das eigentlich vor. Wenn ich etwas von .überschreiben. lese, dann hat das ja immer etwas damit zu tun, eine andere Sache zu .ersetzen. - das ist aber nicht mein Ziel (oder sollte es das sein?).
Ich dache bisher eigentlich, die override.ini.append.php sei dazu da, eine Definition zu schreiben um bestehende standardisierte Templates mit eigenen Templates zu überschreiben und denke nicht, das man damit sozusagen neue Templates anlegen kann. (Wie schon oben hinterfragt: überschreiben != erstellen) - oder sehe ich das (auch) falsch?

{$classes|attribute( 'show' )} gibt im übrigen eine Tabelle ohne Inhalt aus.


Schonmal danke für deine Hilfe und Grüße aus Bonn

Christian

Thomas Nunninger

Thomas  Nunninger

Registriert seit: 10.01.2006

Beiträge: 52

Montag, 31. Juli 2006 17:42:57

Hi,

>das ist mir schon klar, dass die Richtlinien das Erzeugen der dort vorhandenen
> Klassen erlauben müssen, bloß kann ich das nirgendwo einstellen. Unter "Neue
> Richtlinie für die Rolle <Autoren> erstellen" kann ich Module auswählen, was
> mich aber in keiner Hinsicht weiter bringt, oder seh' ich das falsch?

Also, entweder verstehe ich dich falsch, oder du siehst das falsch... Wähle das Modul "content", gehe zum nächsten Schritt, da geht es dann um Funktionen wie create und edit. Hab die Reihenfolge jetzt nicht im Kopf, aber du kannst das ganze dann auch noch auf Klassen, Sektionen und Teilbäume einschränken. Schau dir mal die Editor-Rolle an (und gehe evtl. auf editieren dieser Rolle). Da siehst du, wie das aufgebaut ist.

> Ich besitze also die Benutzer-Gruppe "Autoren", sowie die gleichnamige Rollen-Gruppe
> "Autoren". Anbei gibt es einen angelegten User, welcher sich in der Benutzer-Gruppe
> "Autoren" befindet und mit der Rollen-Gruppe "Autoren" verknüpft ist. Die Rollen-Gruppe
> "Autoren" hat bisher (mehr oder weniger zum Test) Zugriff auf den Folder bzw. die Section
> "Autoren" (read) - das funktioniert auch gut mit dem Login usw..

Hast du das eingerichtet, oder sind das ererbte Rechte aus der Anonymous-Rolle?

> Es geht also nicht auf einfachen Wege, wie z.B. ein Template (zb. artikel_eintragen.tpl) mit
> simplen Text und eventuellen Funktionen zu erstellen und dieses unter
> standard/templates/content/view abzulegen und das ganze dann über
> localhost/publish/index.php/content/view/artikel_eintragen irgendwie aufzurufen? So einfach
> stell ich mir das eigentlich vor.

Ja, so einfach ist das auch - jedenfalls fast. Lies dir evtl. mal in der Doku http://ez.no/doc/ez_publish/technical_manual/3_8/templates durch. Ich glaube, ich habe dich bisher mißinterpretiert, weil ich davon ausging, dass du das kennst und Spezialwünsche hast.

Schau dir mal im Admin-Interface im HTML-Code das Formular an, wo du eine Klasse auswählst und diese dann unter diesem Knoten erzeugst. Im Formular wird v.a auch mitgeteilt, was der Elternknoten ist. Das geht dann an content/action und leitet weiter auf content/edit/{id}. Nun liegt es an dir, wo und wie du dieses Formular bastelst. Selbstverständlich kann du ein Template erzeugen, das über content/view/artikel_eintragen/{parent_node_id} aufrufbar ist. Ich bin mir aber nicht sicher, ob du das wirklich unbedingt so willst. Wie ursprünglich geschrieben: du kannst auch einfach - nach Prüfung, ob der Benutzer die Rechte hat - dieses Formular in z.B. jedem Ordner oben anzeigen. Wenn er dann auf neu erstellen klickt, wird er zur Eingabe weitergeleitet.

> Wenn ich etwas von .überschreiben. lese, dann hat das ja immer etwas damit zu tun, eine
> andere Sache zu .ersetzen. - das ist aber nicht mein Ziel (oder sollte es das sein?).
> Ich dache bisher eigentlich, die override.ini.append.php sei dazu da, eine Definition zu
> schreiben um bestehende standardisierte Templates mit eigenen Templates zu überschreiben
> und denke nicht, das man damit sozusagen neue Templates anlegen kann. (Wie schon oben
> hinterfragt: überschreiben != erstellen) - oder sehe ich das (auch) falsch?

Nun ja, wenn du content/view/xyz/{evtl. einige parameter} aufrufst, dann sucht eZ publish in der override ini nach der Regel für node/view/xyz.tpl. Wenn du nichts angegeben hast, sucht er dann im design-Verzeichnis node/view/xyz.tpl. Wenn eine Matching-Regel existiert, dann kannst du ein beliebiges Template angeben. Die bisherigen Views wie full (content/view/full) sind nirgends groß definiert, sondern regeln nur, welche Templates aufgerufen werden. Wenn du z.B. content/view/pdf/{node_id} aufrufst (sieht nicht wirklich hübsch aus!), werden zufälligerweise die gleichen Templates genutzt, die eigentlich zur PDF-Erzeugung mit content/pdf/{node_id} gedacht sind. So, vermutlich habe ich dich jetzt völlig erschlagen

Viel Erfolg

Thomas

christian albert

Registriert seit: 28.07.2006

Beiträge: 7

Montag, 07. August 2006 12:40:09

hallo,

nach meiner kleinen Auszeit mit eZ Publish schaue ich jetzt wieder genauso verwundert (und ja, erschlagen) in diesen Thread wie auch vorher
Ich fall gleich mal mit der Tür ins Haus:

Ich habe also unter design\corporate_site\templates\node\view ein Template namens test.tpl , welches ich laut deiner Aussage theoretisch über index.php/corporate_site/content/view/test.tpl aufrufen kann oder? Geht leider nicht.

Was ich mich übrigens auch frage: Wie erstelle ich einen Ordner ohne, dass dieser gleich oben in der horizontalen Navigation erscheint...? (Der Ordner soll die Artikel beinhalten) Habe vergebens nach einer Art Kontrollfeld gesucht, welches mir evtl. die Option "Invisible" bietet.
So strukturtechnische Sachen sind leider nicht in der Doku beschrieben

Was mir auch noch eingefallen ist: Ein Template ist ja wortwörtlich nur eine Oberfläche die wiederum etwas darstellt, d.h. ich sollte mich fragen ob das was ich möchte wirklich als Template zu bezeichnen währe. Ich bezeichne es aber einfach mal als solches, meine damit aber ganz einfach eine kleine Seite, welche im Contentbereich includet wird und von mir aus erstmal nichts weiter als strikten Text beinhaltet.

Btw. gibt es zu can_create leider keine Dokumentation

Viele Grüße
Christian

Sebastian v. Roos

Registriert seit: 27.01.2006

Beiträge: 358

Montag, 07. August 2006 16:57:51

versteh irgendwie nicht, warum du das override.ini nicht nutzen willst.

kannst doch ein beliebiges contentobjekt erstellen, irgendwo an einer stelle der seite, die sonst nicht zugänglich und sichtbar ist.
z.B. stellst du dort einen Artikel ein - welcher eine node-id hat, meinetwegen 42

Dann baust du ein beliebiges template, z.B. ein Formular. Und für die node-id "42" machst du dann ein override. Das heißt, wenn, wo auch immer, über einen Link 42 aufgerufen wird, kommt nicht ein schöner Artikel, sondern das Formulartemplate.

[mein_formular]
Source=node/view/full.tpl
MatchFile=mein_formular.tpl
Subdir=templates
Match[node]=42

Und den link zu 42 bindest du dann in andere Artikel oder wo auch immer gewünscht ein.
{let formular=fetch(content,node,hash(node_id,42))}Editieren{/let}

ODER

Oder du machst eine neue "view" in override.ini

[editiermodus]
Source=node/view/editieransicht.tpl
MatchFile=editiermodus.tpl
Subdir=templates
Match[class_identifier]=article

im template:
<a href={concat("/content/view/editieransicht/", $node.node_id)|ezurl}>Editieren</a>


sorry, wenn mein Vorschlag völlig abwegig ist, oder nicht ganz richtig
hab einfach mal drauflos geschrieben. aAoGewähr


template editiermodus.tpl, was den article editierbar anzeigt kann z.B. so aussehen:

<div id="article">
<form method="post" action={"content/action"|ezurl}>
<input type="hidden" name="ContentNodeID" value="{$node.node_id}" />
<input type="hidden" name="ContentObjectID" value="{$node.object.id}" />
<input type="hidden" name="ViewMode" value="full" />

{section show=$node.object.can_edit}
<div class="editbutton">
<input class="button" type="submit" name="EditButton" value="{'Edit'|i18n('design/standard/node/view')}" />
</div>
{/section}

<h1>{$node.name|wash}</h1>


<div class="intro">
{attribute_view_gui attribute=$node.object.data_map.intro}
</div>

<div class="body">
{attribute_view_gui attribute=$node.object.data_map.body}
</div>

</form>
</div>

ps
Um ein Objekt im Menu nicht anzuzeigen, kannst du in den verschiedenen menu tpls normal filtern, nach classen, sectionen.
einzelne Node ausschließen geht auch irgendwie, steht in der doc.

_______________________

http://webdevelopment.artenic.de ARTENIC - Publishing mit allen Mitteln!

christian albert

Registriert seit: 28.07.2006

Beiträge: 7

Dienstag, 08. August 2006 11:34:24

Hallo und danke für deine super Erläuterung, hat mir gut geholfen.

Weiterhin stellt sich mir die Frage:

[formular]
Source=node/view/formularansicht.tpl
MatchFile=formular.tpl
Subdir=templates
Match[class_identifier]=artikel

Was geschieht mit formularansicht.tpl? Wird die irgendwo angezeigt oder warum genau musste ich die erstellen? Ohne gings jedenfalls nicht und mehr als irgend ein Blindtext steht da auch nicht drin.

Ihr seid klasse

Gruß
Christian

Sebastian v. Roos

Registriert seit: 27.01.2006

Beiträge: 358

Dienstag, 08. August 2006 13:23:25

also ich bin da so draufgekommen, weil ich /node/view/line, /node/view/full usw. eigentlich alle schon in Verwendung hatte, aber noch eine weitere Ansicht benötigte.
Da habe ich das so ausprobiert nach der berühmten Programmiermethode T&E


wobei es bei mir auch ohne das Vorhandensein von formularansicht.tpl funktioniert, wenn ich es so aufrufe:
<a href={concat("/content/view/formularansicht/", $node.node_id)|ezurl}>Editieren</a>

wie das so zu technisch zu werten ist, würde mich auch interessieren,
ansonsten sag ich nichts mehr ohne meinen Anwalt


oder jedenfalls nicht öffentlich
Gruß

_______________________

http://webdevelopment.artenic.de ARTENIC - Publishing mit allen Mitteln!

Um Zugang zu den Foren zu erhalten, müssen Sie angemeldet sein