Wie gestalten Sie das Erstellungs- / Bearbeitungsformular eines Inhaltstyps in Drupal 7?

7

Wie es heißt - ich habe einen D7-Inhaltstyp, dessen Bearbeitungsformular thematisiert werden muss. Ich habe dies die ganze Zeit in D6 getan, indem ich Themenfunktionen in template.php registriert und die zugehörigen Themenfunktionen geschrieben habe, aber in D7 scheinen sich die Dinge geändert zu haben, insbesondere was die Datei template.php betrifft oder ob D7 auf die Verwendung von .tpl umgestellt hat .php-Dateien dafür oder was auch immer. Gibt es da draußen einen Rat?

Jim Miller
quelle

Antworten:

4

Laut der Handbuchseite zu Themen-Knotenformularen in Drupal 7 würden Sie tatsächlich Änderungen an den .tpl.php-Vorlagendateien vornehmen.

Wir haben es jedoch normalerweise einfacher gefunden, Field Group und Display Suite zu verwenden . Knotenformularspalten ist eine weitere Option.

Choster
quelle
Gute Vorschläge; Vielen Dank. Ich werde auch die Module überprüfen, die Sie erwähnt haben.
Jim Miller
Gute Antwort. Ich habe Display Suite mit einigem Erfolg verwendet, aber wenn Sie feststellen, dass etwas verloren geht, können Sie es deaktivieren und dann analysieren, wo das Problem liegt. Wenn Sie das Formular für die Ausgabe bestimmter Felder anpassen möchten , können Sie auch drupal.org/project/field-conditional-state in Betracht ziehen , um bestimmte Felder abhängig vom Wert anderer anzuzeigen.
Therobyouknow
Beachten
Sie
20

Sie haben zwei Möglichkeiten.

Option 1: Verwenden der template.php Ihres Admin-Themas

  • Wählen Sie das richtige Thema zum Anpassen. Denken Sie daran, dass Drupal 7 standardmäßig ein anderes Thema für die Verwaltung verwendet. Unter admin / Erscheinungsbild gibt es eine Einstellung, die angibt, was Ihr Admin-Thema ist und ob die Inhaltsbearbeitung das Admin-Thema verwenden soll. Sehen Sie sich diese Einstellung an und finden Sie heraus, ob Sie Ihr Hauptthema oder Ihr Administratorthema anpassen möchten.
  • Sobald das Thema identifiziert wurde, möchten Sie möglicherweise ein Basisthema erstellen, anstatt das vorhandene Thema zu ändern, wenn es sich bei diesem Thema um ein Kernthema handelt und nicht um ein Thema, das sich in sites / all / theme oder sites / Something.com / theme befindet. Es ist sowieso eine schlechte Idee, ein Kernthema zu ändern. Auch wenn es sich um ein heruntergeladenes Thema handelt, ist es sinnvoll, ein Unterthema zu erstellen, damit Sie das heruntergeladene Thema weiter aktualisieren können, wenn neue Versionen herauskommen.
  • (optional), um ein Unterthema zu erstellen. Angenommen, Ihr Admin-Thema ist sieben und wird auch für die Bearbeitung von Inhalten verwendet. Erstellen Sie einfach einen Ordner mit dem Namen my_seven unter sites / all / theme . Fügen Sie als Nächstes eine my_seven.info unter dem neu erstellten Verzeichnis my_seven mit den folgenden Inhalten hinzu

    Basisthema = Sieben Name = Meine Sieben Beschreibung = Mein einfaches einspaltiges, tabellenloses Verwaltungsthema mit flüssiger Breite (Kind der Sieben).

  • Fügen Sie nun eine Datei mit dem Namen template.php unter demselben Ordner mit dem folgenden Inhalt hinzu. Bitte beachten Sie, dass die Formular-ID ausschließlich vom Computernamen Ihres Inhaltstyps abgeleitet ist. Der Name der Vorlage kann jedoch beliebig sein, aber -node-form scheint eine gute Konvention zu sein.

    <?php 
    
    function my_seven_theme() {
      return array(
        '<my_content_machinename>_node_form' => array(
            'arguments' => array('form' => NULL),
            'template' => '<my_content_machinename or anything else>-node-form',
            'render element' => 'form',
        ),
      );
    }
  • Erstellen Sie jetzt eine Datei <content_type_machinename> -node-form.tpl.php mit den folgenden Inhalten, um zu testen, ob die Dinge funktionieren. Wenn Sie das benutzerdefinierte Formular sehen, ändern Sie einfach die Datei tpl.php nach Herzenslust. Wählen Sie ein anderes benutzerdefiniertes Feld als den Titel aus, um sicherzustellen, dass es einwandfrei funktioniert. Wählen Sie im Idealfall etwas aus, das kein einfaches Textfeld ist. Ein Begriff Referenzfeldtyp wäre ein guter Kandidat, um sicherzustellen, dass Ihr Unterthema einwandfrei funktioniert.

    <div>   
        <?php print drupal_render($form['title']); ?>
    </div>
    <div>
        <?php print drupal_render($form['field_<my_field1>']); ?>   
    </div>
  • Leeren Sie Ihren Theme-Registrierungs-Cache (eigentlich nicht erforderlich, wenn ein Theme zum ersten Mal verwendet wird, aber tun Sie es trotzdem).

  • Legen Sie das neue Unterthema auf der Seite "Admin / Erscheinungsbild" als Administratorthema fest.
  • Bearbeiten Sie einen Inhalt oder erstellen Sie einen neuen Inhalt, und Sie sollten Ihr geändertes Formular sehen.

Option 2: Verwenden Sie Ihr eigenes Drupal-Modul, um das Formular anzupassen

  • Erstellen Sie einen neuen Ordner mit dem Namen custom_content_forms unter sites / all / modules
  • Erstellen Sie eine Datei custom_content_forms.info mit dem folgenden Inhalt

    name = My Custom Content Forms
    description = A trivial module to customize my content entry forms such as smartphone
    core = 7.x
  • Erstellen Sie ein custom_content_forms.module mit dem folgenden Inhalt

    <?php
    
    function custom_content_forms_theme() {
        return array(
            '<contenttype_machine_name>_node_form' => array(
                'template' => '<contenttype_machine_name>-node-form',
                    'render element' => 'form',
            ),
        );
    }
  • Erstellen Sie jetzt eine Datei <content_type_machinename> -node-form.tpl.php mit den folgenden Inhalten, um zu testen, ob die Dinge funktionieren. Wenn Sie das benutzerdefinierte Formular sehen, ändern Sie einfach die Datei tpl.php nach Herzenslust. Wählen Sie ein anderes benutzerdefiniertes Feld als den Titel aus, um sicherzustellen, dass es einwandfrei funktioniert. Wählen Sie im Idealfall etwas aus, das kein einfaches Textfeld ist. Ein Begriff Referenzfeldtyp wäre ein guter Kandidat, um sicherzustellen, dass Ihr Unterthema einwandfrei funktioniert.

    <div>   
        <?php print drupal_render($form['title']); ?>
    </div>
    <div>
        <?php print drupal_render($form['field_<my_field1>']); ?>   
    </div>
  • Gehen Sie zur Administration und aktivieren Sie das neue Modul. Sie sollten Ihr benutzerdefiniertes Formular sehen, wenn Sie Inhalte des Zieltyps hinzufügen oder bearbeiten.

HINWEIS: Wenn Sie mit beiden Mechanismen anpassen, zieht Drupal das Thema dem Modul vor.

BEARBEITEN: Die oben genannten werden nur die Felder erzeugen. Das Menü mit den Knoteneinstellungen sowie die Schaltflächen zum Senden und Anzeigen einer Vorschau werden standardmäßig nicht angezeigt. wenn Sie nur eine hinzufügen

<?php print kpr($form); ?>

auf der Seite (Entwicklungsmodul muss aktiviert sein, damit kpr funktioniert) , um einen Speicherauszug des Arrays $ forms zu erstellen. Sie werden sehen, dass Sie diese Dinge ganz einfach auf Ihre Formularseite bekommen können, indem Sie der tpl.php Folgendes hinzufügen

<div><?php print drupal_render($form['additional_settings']); ?></div>
<div><?php print drupal_render($form['actions']); ?></div>
Arajashe
quelle
+1 tolle Antwort - ich werde das selbst benutzen. Ich werde es auch erweitern, um einige Felder basierend auf der URL vorab auszufüllen, die mich auf die Seite gebracht hätte.
Therobyouknow
Wie geht das mit Feldern mit mehreren Werten um? Das heißt, die Möglichkeit, mehr von einem bestimmten Feldtyp hinzuzufügen, wurde <?php print drupal_render($form['field_<my_field1>']); ?>für ein Feld verwendet, das über die Schaltfläche "Ein weiteres Element hinzufügen" verfügt. Beim Klicken auf die Schaltfläche wurde das neue Feld jedoch nicht angezeigt.
Therobyouknow
Ich habe meinen letzten Kommentar ausführlicher erklärt, indem ich hier eine neue Frage gestellt habe: drupal.stackexchange.com/questions/85975/…
therobyouknow
2
Wie in der obigen Antwort beschrieben, müssen Sie drupal_render_children($form);beim Erstellen des
Formulars
Ich habe die zweite Option befolgt, um die Vorlage für das Formular zur Erstellung eines benutzerdefinierten Inhaltstyps zu ändern. Nach dem Absenden des Formulars geschieht jedoch nichts. Der Knoteninhalt wird nicht eingefügt und das Formular wird erneut geladen.
Shasi Kanth
1

So ändern Sie Knotenformulare über die Admin-Oberfläche:

Display Suite - http://drupal.org/project/ds

Feldgruppe - http://drupal.org/project/field_group

Renderbare Elemente - http://drupal.org/project/rel

Aktivieren Sie die folgenden Module: Display Suite, Display Suite-Formulare, Display Suite-Extras, Feldgruppe, Renderable Elements

Legen Sie die Einstellungen für renderbare Elemente fest, indem Sie auf der Einstellungsseite unter admin / structure / rel / config das Kontrollkästchen "Formularregistrierung aktivieren" aktivieren.

Gehen Sie nun zum Formular "Felder verwalten" eines Ihrer Inhaltstypen. Klicken Sie oben auf der Seite auf "Formularanzeige verwalten", um das Formular bei Renderable Elements zu registrieren und auszuwählen, welche Felder aktiviert werden sollen. Nach dem Speichern dieses Formulars können Sie die Anzeige ALLER Felder Ihres Inhaltstyps mithilfe der Standard-Benutzeroberfläche der Display Suite verwalten.

Quelle: http://getlevelten.com/blog/ian-whitcomb/drupal-form-layouts-renderable-elements

Laniol
quelle