Inhaltstypen und Menüs
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 14.11.2007 - 12:40 Uhr in
Hallo!
Ich überlege gerade ein Vereinsseite mit Drupal zu erstellen. Ich nutze Drupal zum ersten mal, und bin bis jetzt wirklich begeistert von der Software.
Nun habe ich ein kleines Problem.
Um die Nutzer nicht unnötig zu verwirren, möchte ich zwei Inhaltstypten haben.
Z.B. "News" und "Statische Seite"
Bei News soll der Nutzer bei der Inhalsterstellung die Optionen für das Menü nicht sehen.
Bei statischen Seiten soll das Menü erstellt werden können. Noch besser wäre, wenn es sogar Pflicht wäre.
Wie ich bei unterschiedlichen Usern die Rechte für das Menü beschränke ist mir klar.
Geht das auch in Abhängigkeit von den Inhaltstypen?
Vielen Dnak im voraus.
Nicolas.
- Anmelden oder Registrieren um Kommentare zu schreiben
Modul schreiben
am 14.11.2007 - 15:37 Uhr
Hallo tantenic.
Ehrlich gesagt weiß ich nicht, ob man das so direkt im Backend einstellen kann. Sitze aber grade an der Menümanipulation und habe dir fix ein kleines Modul geschrieben. Ich habe es nicht groß getestet, gibt also bitte Feedback ob es wirklich so funktioniert wie du es möchtest. Einfach unten downloaden und installieren.
Die Funktion des Moduls sieht folgendermaßen aus:
<?php
/**
* Klappt automatisch die Menüfelder beim Anlegen eines Content-Types auf,
* setzt das Titel-Feld des Menüs als Pflichtfeld
*
* Deaktiviert die Menüfelder bei den angegebenen ContentTypes
*
* @param int $form_id
* @param array $form
*/
function globalfunctions_form_alter($form_id, &$form) {
$ctypes = array();
#Trage hier die Contenttypen ein, bei denen die Menügruppe komplett ausgeblendet werden soll.
#Muster $ctypes[] = 'Name des Contenttyps';
$ctypes[] = 'news';
//$ctypes[] = 'page';
if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
$form['menu']['#collapsed'] = FALSE; //klappt das Menü auf
$form['menu']['title']['#required'] = TRUE; //setzen als Pflichtfeld
}
if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
foreach ($ctypes as $ctype)
if ($form['type']['#value'] == $ctype) unset ($form['menu']); //Menüfeld deaktivieren
}
}
?>
Code könnte buggy sein, also teste es bitte wirklich und verlasse dich nicht auf mich.
Evlt gibt es auch eine einfachere Lösung als das hier :-)
Download[1].
[1] http://rapidshare.com/files/69662387/globalfunctions.rar.html
(gabs hier nicht mal ne Attach-Funktion?)
Hallo mhuebl,
am 14.11.2007 - 20:08 Uhr
Hallo mhuebl,
vielen Dank. Das ist ja super.
Da ich nur eine Testinstallation habe, kann ich angstfrei testen.
Ich werde es heute Abend testen und später berichten.
Edit:
Ich habe es jetzt getestet. Zuerst funktionierte es leider nicht.
Ich habe in Deinem Code mit print_r($form) die Variable anzeigen lassen.
$form['menu'] existierte leider nicht.
Dann habe ich diesen Bericht gefunden.
http://www.molecularsciences.org/drupal/modifying_your_forms
Nachdem ich Dein Modul und die Funktion in xglobalfunctions umbenannt habe funktioniert es.
Die Variable $form['menu'] war jetzt auch zu finden.
Vielen Dank für den Tipp und gelernt habe ich auch was dabei.
Nicolas.
Hmm.. wieso genau
am 14.11.2007 - 20:20 Uhr
Hmm.. wieso genau funktionierte es jetzt anfangs nich?
Was hat die Umbenennung damit zu tun?
Kannst du mir das jetzt erklären? So als Revanche, dann brauch ich den Artikel nich lesen :-)
Das Problem ist die
am 15.11.2007 - 09:05 Uhr
Das Problem ist die Reihenfolge in der die Module abgearbeitet werden.
Das Module "menu" kommt nach dem Module "globalfunctions".
Deshalb werden alle Werte für das Formular vom Module "menu" erst später gesetzt, bzw. überschrieben.
Darum existierte beim bei der Ausgabe von print_r($form) auch noch kein Wert $form['menu'].
Die Module werden in folgender Reihenfolge abgearbeitet. Erst nach dem weight-Wert, dann nach Alphabet.
Der weight-Wert der meisten Module steht nach der Installation auf 0. Dies kann man entweder direkt in der Tabelle "system" nachschauen, oder man installiert das Module "Module Weight" http://drupal.org/project/moduleweight.
Schreibt man folgenden Code in eine zusätzliche Datei globalfunctions.install wird der Wert beim installieren des Moduls auf 10 gesetzt und es funktioniert auch mit einem anderen Modulnamen.
<?php
function globalfunctions_install() {
db_query("UPDATE {system} SET weight = 10 WHERE name = 'globalfunctions'");
}
function globalfunctions_uninstall() {
db_query("DELETE FROM {system} WHERE name = 'globalfunctions'");
}
Na dann lernen wir hier ja
am 15.11.2007 - 10:28 Uhr
Na dann lernen wir hier ja gegenseitig voneinander. Dankeschön!
Ich hätte da aber noch eine Theorie anzubieten:
Die Module, die in sites/all/modules liegen, sind schwerer als die in /modules/
Bei mir funktioniert das Modul nämlich auch mit g am Anfang ;)
gruß
mit
am 15.11.2007 - 11:53 Uhr
mit http://drupal.org/project/formfilter kannst du pro Formular (also auch pro Inhaltstyp) entscheiden, welche Möglichkeiten deine Benutzer sehen dürfen. Es gibt nur die Möglichkeit zwischen "dürfen sehen" und "dürfen nicht sehen", also wenn du nur eine Benutzerrolle hast, die bestimmte Sachen nicht sehen sollen, dann geht das gut. Was nicht geht, ist das verschiedene Benutzer verschiedene Sachen nicht sehen können.
Auf jeden Fall ist das Modul sehr praktisch, ich verwende es auf unserer Firmenwebsite um die Mitarbeiter nicht zu verwirren. Am Ende bleibt in meinem Formular nur noch der Titel, Textkörper und "Senden" Knopf, den Rest blende ich aus. Ich glaub das wäre was für dich.
Grüße
Anja
Das kann gut möglich
am 15.11.2007 - 12:21 Uhr
@mhuebl
Das kann gut möglich sein.
Die Verzeichnisse kannte ich noch gar nicht.
Ich hätte mich ohne Deinen Tipp gar nicht an ein Modul rangewagt.
Drupal macht hier wirklich Spass.
Ich habe schon ein Formular erstellen können, wo man die Option pro Inhaltstyp setzen kann. Vergleichen mit der Pluginprogrammierung bei z.B. Wordpress ist das hier wirklich genial gelöst.
Nochmals Danke für die gute und schnelle Hilfestellung.
@mit
Schaue ich mir mal an.
Hört sich genau nach dem an, was ich suche.
Danke schön.
@tantenic
am 15.11.2007 - 13:27 Uhr
@tantenic
Lege deine Module in den /sites/all/modules Ordner, gleiches gilt auch für deine Themes /sites/all/themes. Dann belässt du den Drupal Core in seinem Ausgangszustand und kannst besser updaten.
Den Sites Ordner verwendet man auch für Multisite-Installationen. siehe http://www.drupalcenter.de/handbuch/6083
@aschiwi
Danke für das Modul. Spart Tipparbeit :-)
Hallo, ich suche genau nach
am 11.09.2009 - 14:13 Uhr
Hallo,
ich suche genau nach der Lösung. Leider bislang ohne Erfolg. Das Modul hier ist nicht mehr als download verfügbar. Gibt es was vergleichbares für Drupal 6?
Gruß,
Boris
-----------------------------
www.missingdot.de
Die Welt ist Drupal -- Blog im Aufbau
ctm
am 11.09.2009 - 14:28 Uhr
Hab ich vorhin erst an anderer Stelle für solche Fälle empfohlen: http://drupal.org/project/ctm
--
textformer mediendesign | Webkrauts
ja, das war wohl auch für
am 11.09.2009 - 14:35 Uhr
ja, das war wohl auch für mich. ;-)
aber das hilft mir hier leider nicht weiter. es geht mir darum, dass ich den Linktitel als Pflichtfeld haben möchte und am besten schon ausgeklappt.
das kann ich mit diesem modul ja nicht realisieren, oder?
gruß,
boris
-----------------------------
www.missingdot.de
Die Welt ist Drupal -- Blog im Aufbau
Aha
am 11.09.2009 - 14:47 Uhr
Ok, habe das mit dem Pflichtfeld übersehen.
Aber, wenn das Problem noch nicht gelöst ist, warum hast du den einen Thread als gelöst gekennzeichnet und das Thema nicht dort weitergeführt?
Jedenfalls: Dafür kenne ich kein Modul. In dem Fall kannst du dir ein eigenes Modul schreiben, das das Formular ändert. Nach hook_form_alter googeln. Zum Start vielleicht: http://www.lullabot.com/articles/modifying-forms-5-and-6
--
textformer mediendesign | Webkrauts