[Gelöst] Systempfade wie /node/add einfach überschreiben/ersetzen
am 13.09.2010 - 17:55 Uhr in
Hallo!
Eine womöglich alberne Frage... aber ich möchte sichergehen, daß ich mir mit der ungewöhnlich simplen Lösung nicht irgendein Problem einfange.
Ausgangslage:
Ich habe node_limitnumber das Limit für die Erstellung des Contenttype "Branchenbucheintrag" auf 1 gesetzt - funktioniert prima, (übersetzte) Fehlermeldung kommt, weitere Einträge werden verhindert.
Schönheitsfehler ist allerdings, dass die Fehlermeldung auf der Systemseite /node/add angezeigt wird, die dem Nutzer dann alle von ihm zu erstellenden Contenttypes anzeigt, was z.B. für Sachen wie das Profil von dieser Stelle aus Quatsch ist.
Amateurlösung Stand heute:
Ich habe einfach eine "Erklärungsseite" angelegt und dieser manuell den Alias /node/add gegeben - ohne daß mir drupal einen Konflikt gemeldet hätte (von wegen /node/add existiert schon!). Die neue Seite wird auch korrekt aufgerufen und angezeigt, wenn ich die gewollte Fehlermeldung provoziere.
Also augenscheinlich(!) alles ok - trotzdem meine Frage:
"Darf" ich einen Systempfad einfach so mit einem URL Alias "überschreiben"? Oder fliegt mir das irgendwann/irgendwie um die Ohren?
Müsste ich die alte/originale /node/add Seite irgendwo löschen oder deaktivieren, um Konflikte zu vermeiden?
Oder sollte ich besser die originale node/add belassen und stattdessen mit einem Redirect Modul (z.B. path_redirect) arbeiten um für die node/add auf einen anderen node oder Alias verweisen?
Bin für jeden Hinweis dankbar, ob ich das so lassen kann oder besser ändern sollte!
Danke!
- Anmelden oder Registrieren um Kommentare zu schreiben

Gegenfrage: Was tust Du denn,
am 13.09.2010 - 18:17 Uhr
Gegenfrage: Was tust Du denn, wenn Du zukünftig eine Übersicht der Möglichen zu erstellenden Inhaltstypen mit entsprechenden Verlinkungen benötigst? Da wäre es doch prima wenn man da dann einfach node/add nutzen könnte?
Was ich nicht ganz verstanden hatte, weshalb landest Du fälschlicherweise auf node/add - kommt das von irgendeinem Modul? Falls ja .. solltest Du vielleicht mittels einer angepassten Funktion in Deinem verwendeten Theme auf einen anderen Pfad umleiten?
Zur Gegenfrage (hätte ich
am 13.09.2010 - 18:32 Uhr
Zur Gegenfrage (hätte ich vielleicht erwähnen sollen...):
Ich benötige den Inhalt/die funktion von node/add definitiv nicht. Die Nutzerführung zum Erstellen von Inhalten ist immer eher themenspezifisch und wird dann per Alias (hier z.B. Branchenbuch/Eintrag_erstellen) immer direkt auf z.B. node/add/Branchenbucheintrag geleitet (wobei Branchenbucheintrag natürlich ein gülter Content Type ist...).
Also von der Seite her kein Problem.
Zum 2. Punkt - ich lande nicht fälschlicherweise auf node/add (das habe ich vielleicht auch etwas unsauber formuliert). Das Modul node_limitnumber kontrolliert, daß pro User nur ein Beitrag vom Typ Branchenbucheintrag erstellt werden darf, verhindert dieses auch erfolgreich und erzeugt dann die Fehlermeldungsbox mit der Message. Nur die Anzeige dieser Fehlerbox erfolgt auf node/add und das ist halt der Schönheitsfehler... Also ich rufe Branchenbuch/Eintrag_erstellen (bzw. wahlweise node/add/Branchenbucheintrag...) auf und lande dann mit der Fehlermeldung auf der node/add, deren originaler Inhalt da nicht so richtig passt...
Wie erwähnt - die node/add in ihrer Ursprungsform brauche ich nicht, und augenscheinlich funktioniert alles nach meinem Wunsch - ich dachte halt nur, daß es (aus welchen Gründen auch immer) ein "ungeschriebenes Gesetz" gibt, wie "überschreibe nie einen Systempfad" oder so...
windm schrieb Wie erwähnt -
am 13.09.2010 - 19:00 Uhr
Wie erwähnt - die node/add in ihrer Ursprungsform brauche ich nicht, und augenscheinlich funktioniert alles nach meinem Wunsch - ich dachte halt nur, daß es (aus welchen Gründen auch immer) ein "ungeschriebenes Gesetz" gibt, wie "überschreibe nie einen Systempfad" oder so...
Das von Dir erwähnte Modul kenne ich nicht, deshalb war das Posting leicht kryptisch für mich :-) .... aber mit "überschreibe nie einen Systempfad" liegst Du auch bei DRUPAL garantiert nicht falsch! Ich würde keinen Systempfad überschreiben, da es immer Pfade gibt, die später auch von Zusatzmodulen genutzt werden! Es sind eben Systempfade!
Neuer Ansatz: node/add erweitern (mit Panels?)
am 14.09.2010 - 11:24 Uhr
Vielen Dank schon mal, daß du dich so schnell und geduldig mit meiner Frage auseinandergesetzt hast.
Ich würde dann jetzt den Weg gehen und die originale node/add Seite beibehalten.
Die Beschreibungen der Contenttypes (also auch Forenthemen, Profil etc.) habe ich schon so umformuliert, dass sie an dieser Stelle Sinn ergeben. Was ich mir nun noch wünschen würde, wäre ein Einleitungstext auf der Seite... also ein einfacher Textblock zwischen der Überschrift und dem userspezifisch generierten Teil mit den verfügbaren Contenttypes die der User erstellen kann.
Komme ich bei so einer Systemseite mit Panels weiter? Oder lohnt es gar nicht, mich da reinzuarbeiten, weil das womöglich für Systempfade/-seiten gar nicht der richtige Ansatz ist...?
windm schrieb Was ich mir nun
am 14.09.2010 - 13:05 Uhr
Was ich mir nun noch wünschen würde, wäre ein Einleitungstext auf der Seite... also ein einfacher Textblock zwischen der Überschrift und dem userspezifisch generierten Teil mit den verfügbaren Contenttypes die der User erstellen kann.
Ich würde einfach einen Block erstellen mit den nötigen Zusatz Informationen! Den kannst Du dann in der Blockverwaltung genau dem Pfad node/add zuweisen und er wird nur dort angezeigt.
Kommt jetzt nur noch auf das verwendete Theme an, ob es Dir eine Region zum Block einblenden an der passenden Stelle zur Verfügung stellt. Eine Region einrichten ist aber in zwei Minuten erledigt ... PANELS einrchten und erlernen dauert da sicherlich länger ... Infos zu Regionen und Blöcken gibts hier im Handbuch ... oder vielleicht hilft auch diese Anleitung von mir zu nem eigentlich anderen Thema .... aber es wird darin auch gezeigt, wie man Regionen anlegt und Blöcke zuweist ...
windm schrieb Vielen Dank
am 14.09.2010 - 13:27 Uhr
Vielen Dank schon mal, daß du dich so schnell und geduldig mit meiner Frage auseinandergesetzt hast.
Ich würde dann jetzt den Weg gehen und die originale node/add Seite beibehalten.
Die Beschreibungen der Contenttypes (also auch Forenthemen, Profil etc.) habe ich schon so umformuliert, dass sie an dieser Stelle Sinn ergeben. Was ich mir nun noch wünschen würde, wäre ein Einleitungstext auf der Seite... also ein einfacher Textblock zwischen der Überschrift und dem userspezifisch generierten Teil mit den verfügbaren Contenttypes die der User erstellen kann.
Komme ich bei so einer Systemseite mit Panels weiter? Oder lohnt es gar nicht, mich da reinzuarbeiten, weil das womöglich für Systempfade/-seiten gar nicht der richtige Ansatz ist...?
Das war auch mein erster Gedanke bei deiner Frage, Panels kann ja auch node/add überschreiben. Allerdings ist Panels tatsächlich nicht einfach mal eben so gemacht. Die Idee mit dem Block von Thoor finde ich ganz gut, aber dann hast du da immer noch die erstellbaren Inhaltstypen. Wenn dich das nicht stört, wäre das eine gute Lösung.
Auch auf die Gefahr hin,
am 14.09.2010 - 15:11 Uhr
Auch auf die Gefahr hin, etwas verbohrt zu wirken... ;-) würde ich die Sache ungern mit dem Block lösen - das wäre sicher gut, wenn man einfach noch ein paar Randnotizen loswerden will.
Mir geht es aber darum, zwischen title und body noch einen Einleitungs-/Erklärungstext einzuschieben und das auch noch für weitere Seiten, die oft kein Feld für Erklärungen vorhalten (apply_for_role fällt mir spontan ein).
Es ist auch nicht so, daß ich noch gar nichts mit Panels gemacht hätte - für neu angelegte Seiten habe ich damit eigentlich immer mein Ziel erreicht.
Mein bisheriger Stand/Versuch dazu:
- Ich würde über das Dashboard auf die vorhandenen Seiten gehen und finde da auch eine System-Seite "Beitragsvorlage" (node/%node).
- Die bearbeite ich, bzw. erstelle eine Variante mit Kontext "Beitragserstellungsformular".
- Nur muß ich dann im Dialog einen(!) Inhaltstyp auswählen, damit ich beim Dialogfenster "Inhalt einfügen" auch die Formulare finde.
- Da nehme ich z.B. das "Allgemeine Formular" - schon habe ich mir eine spezielle Eingabeseite für einen Inhaltstyp gebaut... so weit so gut.
Nur stehe ich wohl total auf der Leitung, wie ich das für die generische node/add mache... bin ich mit dem der o.g. Seite node/%node auf der richtigen Spur?
Welche Settings muß ich (dann) vornehmen, damit ich für node/add ein Panel Layout definieren kann und dann als Inhalt wieder den ursprünglichen Inhalt der node/add einfügen kann?
Ich hoffe, ich nerve nicht mit meiner Sturheit, das schaffen zu wollen ;-)
mit rules kannst du ein
am 14.09.2010 - 15:20 Uhr
mit rules kannst du ein nodlimit abfragen und zur einer url umleiten und/oder eine message ausgeben
node_limit ist schon ok - die generelle Panels Frage bleibt...
am 15.09.2010 - 23:04 Uhr
Das sind alles schon ganz pragmatische Ansätze für das konkrete (eine) Beispiel.
Ich bin trotzdem noch grundsätzlich an der Panels-Frage interessiert... Ist es möglich, bestehende Systempfade mit einem Panel zu gestalten?
Für die Suche geht das z.B. - für den Pfad /search/node/!keyword ist ja sogar schon eine aktivierbare Panel-Seite da - da gestalte ich ein wenig, setze unter anderem aus den Steuerelementen Search form und Search result als Baustein wieder rein und schon habe ich eine fertig gelayoutete Suchseite auf der ich Textbereiche, Blöcke oder auch beliebige views einbauen kann...
Wenn ich aber eine neue Panel-Seite anlegen will - z.B. für den Pfad node/add oder auch für user/%user/apply_for_role bekomme ich immer direkt die Fehlermeldung, daß bestehende Pfade nicht überschrieben werden können.
Kann man tatsächlich nur die in Panels vorgegebenen (und default deaktivierten) Pfade überschreiben?
Oder muß ich bei der Pfadangabe irgendwas tricksen, damit ich bestehende Pfade mit einem Panel-Layout versehen kann?
Falls das nicht geht, ist ja auch ok - dann gebe ich mich geschlagen ;-)
template.php
am 16.09.2010 - 01:18 Uhr
Drupals Menü-System fällt um jeweils ein Level zurück, wenn ein Menüpunkt nicht aufrufbar ist. daher führt die Nichtexistenz der Page node/add/blah zum Aufruf von node/add - auch in einer jungfräulichen Drupal-Installation ohne Contribs. Probiere es aus: der Aufruf von admin/user/blah führt zum Aufruf von admin/user, da es die Page admin/user/blah nicht gibt. Es handelt sich also um einen Fallback-Mechanismus des Drupal-Menüsystems.
Wenn Du folgende Funktion in die template.php Deines Themes schreibst, kannst Du den Listen-Output von node/add mit allem ersetzen, was Dir an dieser Stelle lieber ist:
<?php
/**
* Display the list of available node types for node creation.
*
* @ingroup themeable
*/
function phptemplate_node_add_list($content) {
$output = '';
if ($content) {
$output = '<dl class="node-type-list">';
foreach ($content as $item) {
$output .= '<dt>'. l($item['title'], $item['href'], $item['localized_options']) .'</dt>';
$output .= '<dd>'. filter_xss_admin($item['description']) .'</dd>';
}
$output .= '</dl>';
}
return $output;
}
?>
Zwar ist das Ganze kein Theming-Thema, weil Du das bei einem Theme-Wechsel ja auch nicht wirst haben wollen - aber es ist bestimmt am einfachsten so.
Danke an alle - auch wenn es keine einfache Lösung gab... ;-)
am 16.09.2010 - 10:26 Uhr
Vielen Dank für die Vorschläge - auch die letzte Lösung ist pragmatisch und gut, ich werde aber glaube ich trotzdem für diesen Zweck davon absehen, das über Eingriffe in templates oder Theming umzusetzen.
Ich dachte eher, daß ich im drupal einfach eine von 10Mio. Funktionen übersehen hätte, mit der man auf einfachste Weise an die Gestaltung dieser Systempfade rankommt.
Was tatsächlich geht und was ich auch einsetze sind folgende Lösungen (für alle Leser dieses Threads, die vielleicht eher/genau das gesucht haben):
-> Mit Panels habe ich die Gestaltung verschiedener Standardseiten problemlos hinbekommen - so z.B. für die Inhalte- und Nutzer-Suche. Die entsprechenden "gestaltbaren" Seiten/Pfade kommen schon direkt mit Panels und müssen nur noch aktiviert und gefüllt werden... Panels beherrscht man sicher nicht in 5 Minuten, kann sich aber relativ schnell herantasten, wenn man erstmal unabhängige Seiten gestaltet und die zur Verfügung stehenden Mittel kennenlernt. Dann ist die Umgestaltung und Aktivierung von z.B. der Suchseite ein Kinderspiel.
-> Mit Contemplate lässt sich ähnliches bewerkstelligen - hier lässt sich pro Contenttype das zu grunde liegende Template modifizieren - direkt aus dem /admin/content/node-type/xyz kann man das Template nach eigenen Wünschen überschreiben/umgestalten... z.B. die Felder neu anordnen, in zwei Spalten anzeigen oder oder oder...
Beides Sachen, die mit den Modulen Panels und Contemplate einfach so (und auch für mich als Anfänger) funktioniert haben.
(Und aus so einer "Liga" hatte ich mir auch eine Lösung für mein node/add oder das user/%user/apply_for_role vorgestellt... ;-) aber das bleibt jetzt einfach so wie es ist...)