Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Views ›

[gelöst]'#collapsible' auf FALSE im Formular von Imagefield per hook ändern

Eingetragen von messy (116)
am 19.04.2009 - 18:33 Uhr in
  • Views
  • Drupal 5.x

Moin

Ich möchte beim Imagefieldmodul eine Funktion (http://rafb.net/p/4Rj0mM37.html) abändern. Zeile 16 '#collapsible' => true soll auf false gesetzt werden.

Wie bekomme ich das mit einem hook hin? Alles was ich versucht habe führte zu unschönen Fehlermeldungen.

‹ Views und [gelöst] Calendar Tagesbezeichnungen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Das sollte mit

Eingetragen von Shademan (82)
am 20.04.2009 - 14:16 Uhr

Das sollte mit hook_form_alter klappen

function deinmodul_form_alter(&$form, $form_state, $form_id)
{

if($form_id=='imagefield_widget_form') {
                   //hier entsprechendes formularelement ändern
);
}
}

________________________________________________________________________
Drupal-Entwicklung und Web-Design in Darmstadt || www.brightsolutions.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Moin Das ist der Ausschnitt

Eingetragen von messy (116)
am 20.04.2009 - 20:02 Uhr

Moin

Das ist der Ausschnitt aus der Funktion _imagefield_widget_form

<?php
  $form
[$fieldname] = array(
   
'#type' => 'fieldset',
   
'#title' => t($field['widget']['label']),
   
'#weight' => $field['widget']['weight'],
   
'#description' => t('Images are not saved until the form is submitted.'),
   
'#collapsible' => true,
   
'#collapsed' => false,
   
'#tree' => true,
   
'#prefix' => '<div id="'. form_clean_id($fieldname .'-attach-wrapper') .'">',
   
'#suffix' => '</div>',
  );
?>

Das Modul hat bereits ein imagefield_form_alter. Dort habe ich eingefügt:

<?php
  
if ($form_id == '_imagefield_widget_form') {
   
$form[$fieldname]['#collapsible'] = false;
  }
?>

Leider klappt das nicht. Was habe ich falsch gemacht?
_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

also $fieldname ist eine

Eingetragen von Shademan (82)
am 20.04.2009 - 20:50 Uhr

also $fieldname ist eine variable, die musst du dann mit dem namen DEINES feldes ersetzen (meinstens "field_irgendwas" benannt).
desweiteren solltest du auf keinen fall in der imagefield_form_alter etwas ändern, sondern eine eigene deinmodul_form_alter() implementieren.

________________________________________________________________________
Drupal-Entwicklung und Web-Design in Darmstadt || www.brightsolutions.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich möchte ja, dass das

Eingetragen von messy (116)
am 20.04.2009 - 21:06 Uhr

Ich möchte ja, dass das für alle $fieldname funktioniert. Habe jetzt:

<?php
if ($form_id == '_imagefield_widget_form') {
   
$fieldname = $field['field_name'];
   
$form[$fieldname]['#collapsible'] = false;
  }
?>

In dem imagefield.modul gab es bereits ein hook_alter. Deswegen habe ich das dort eingefügt.

_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

$form_id hat nur die IDs

Eingetragen von messy (116)
am 22.04.2009 - 11:31 Uhr

$form_id hat nur die IDs für genau diesen node ausgegeben, aber der hook soll ja überall greifen, wo dieses Feld existiert, also habe ich es so gemacht:

<?php
 
if ($form['#id'] == 'node-form') {

    
$form[field_name]['#collapsible'] = FALSE;
  }
?>

Leider muss ich jedes Feld direkt ansprechen, weil ich nicht weiß, wie ich alle imagefield-felder ansprechen soll. Hat da jemand ne Idee?

Dank an stBorchert für die Hilfe.
_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Damit Dein Formalter nicht

Eingetragen von quiptime (4972)
am 22.04.2009 - 12:20 Uhr

Damit Dein Formalter nicht bei ALLEN Nodes bzw. ALLEN Nodetypes versucht sich auszufuehren wuerde ich noch den/die Nodetype/s gegenpruefen. Hat was mit Performance dieses hook_form_alter zu tun.

Im Form Array sollte der Nodetype zur Verfuegung stehen.

------------------------
Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: '#collapsible' auf FALSE im Formular von Imagefield per ...

Eingetragen von traxer (1009)
am 22.04.2009 - 13:42 Uhr
messy schrieb

In dem imagefield.modul gab es bereits ein hook_alter. Deswegen habe ich das dort eingefügt.

In vier Wochen hast du das vergessen und beim nächsten Update des Imagefield-Moduls sind deine Änderungen Geschichte.

messy schrieb

Leider muss ich jedes Feld direkt ansprechen, weil ich nicht weiß, wie ich alle imagefield-felder ansprechen soll.

Frag doch beim CCK nach, welche Image-Felder es gibt:

<?php
function example_form_alter(&$form, $form_state, $form_id)
{
 
// Handelt es sich um ein Node-Formular?
 
if ($form['#id'] == 'node-form') {
   
$node = $form['#node'];
   
// Ueber alle Formularfelder iterieren
   
foreach (element_children($form) as $child) {
     
// CCK-Feld laden
     
$field = content_fields($child, $node->type);     
     
// Wurde ein CCK-Feld gefunden?
     
if ($field) {
       
// Ist es ein Image Field?
       
if ($field['type_name'] == 'image') {
         
// Hat das Feld den passenden Namen?
         
if ($field['field_name'] == $child) {
           
$form[$child]['#collapsible'] = false;
          }
        }
      }
    }
  }
}
?>

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

quiptime schrieb Damit Dein

Eingetragen von messy (116)
am 23.04.2009 - 14:54 Uhr
quiptime schrieb

Damit Dein Formalter nicht bei ALLEN Nodes bzw. ALLEN Nodetypes versucht sich auszufuehren wuerde ich noch den/die Nodetype/s gegenpruefen. Hat was mit Performance dieses hook_form_alter zu tun.

Habe jetzt:

<?php
if ($form['type']['#value'] == 'typen_name') {
?>

Ist das so richtig oder muss ich die Abfrage noch weiter abwandeln, um die Performance beizuhalten?

Zitat:

In vier Wochen hast du das vergessen und beim nächsten Update des Imagefield-Moduls sind deine Änderungen Geschichte.

Mittlerweile habe ich ein eigenes Minimodul dafür.

Sehr schön ausformuliert deine Funktion. Danke!

Das es solche Funktionen wie element_children oder content_fields gibt wusste ich gar nicht. Fehlt mir einfach noch die Erfahrung. Sehr hilfreich. Jetzt versteh ich auch, warum manche keys mit '#' beginnen.

Das nutze ich jetzt:

<?php
function mini_imagefield_collapsible_form_alter($form_id, &$form) {

  if (
$form['type']['#value'] == 'typen_name') {
 
    
$node = $form['#node'];
   
// Ueber alle Formularfelder iterieren
   
foreach (element_children($form) as $child) {
     
// CCK-Feld laden
     
$field = content_fields($child, $node->type);    
     
// Wurde ein CCK-Feld gefunden?
     
if ($field) {
       
// Ist es ein Image Field?
       
if ($field['type'] == 'image') {
         
// Hat das Feld den passenden Namen?
           
$form[$child]['#collapsible'] = FALSE;
        }
      }
    }
  }
}
?>

_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich hatte mich wohl etwas

Eingetragen von quiptime (4972)
am 23.04.2009 - 15:33 Uhr

Ich hatte mich wohl etwas missverstaendlich ausgedrueckt.

Ich meinte Du solltest im hook_form_alter auf die Form ID und den Nodetype pruefen

Etwa so:

function mini_imagefield_collapsible_form_alter($form_id, &$form) {
  if ($form['#id'] == 'node-form' && $form['#node']['type'] == 'der_in_frage_kommende_nodetype') {
    // TODO: Deine Formularaenderung
  }
}

Um Form ID und Nodetype zu ermitteln kannst Du am Anfang des Minimodule diesen Code testhalber einfuegen:

print_r('Form ID: '. $form_id . '<br />');
print_r('Nodetype: '. $form['#node']['type']);

------------------------
Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

Moin, $form_id liefert

Eingetragen von messy (116)
am 24.04.2009 - 08:28 Uhr

Moin,

$form_id liefert nodetypname_node_form und search_block_form.

Die Abfrage funktioniert nicht. Selbst $form['#id'] == 'node-form' wird nicht true, obwohl der key mit node-form gefüllt ist.

$form['#node']['type'] == 'der_in_frage_kommende_nodetype' klappt auch nicht, aber das liegt wohl daran, dass dies ein stdClass Object ist.
_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Unter- und Bindestriche

Eingetragen von quiptime (4972)
am 24.04.2009 - 12:51 Uhr

Du kannst natuerlich auch

print_r($form);

ausfuehren.

Ohne das Devel Modul liefert dies aber unuebersichtliche Infos. Mit aktiviertem Devel Modul kann man statt print_r() ein dsm() verwenden. Also so

dsm($form);

Kann es sein das Dein Problem mit den Unter- und Bindestrichen zu tun hat? Beispiel mit der Form ID

gmap-node-form
gmap_node_form

Nur "gmap_node_form" wird im hook_form_alter funktionieren. Ebenso ist es beim Nodetype.

Ich poste Dir hier mal ein konkretes Beispiel von einem Modul an dem ich gerade arbeite. In dem Code kann man die Sache mit den Unterstrichen erkennen.

<?php
/**
* Implementation of hook_form_alter().
*/
function gmap_node_form_alter(&$form, $form_state, $form_id) {
//dsm('gmap_node_form_alter');
//dsm($form_id);
//dsm($form);
 
$types = gmap_node_check_set_nodetypes();
 
 
// Example form id: story_node_form
 
if ($types['type'][$form['type']['#value']] == 1) {
    if (
$form_id == $form['type']['#value'] .'_node_form') ;
      if (
gmap_node_exists_gmap($node) == TRUE) {
       
$form['gmap'] = array(
         
'#type' => 'value',
         
'#value' => $form['nid']['#value'],
        );
       
$form['buttons']['delete']['#submit'] = array('alter_node_form_delete_submit');
      }
    }
  }
}
?>

Mit diesem form_alter schaffe ich die Voraussetzung den normalen "Delete" Button der Nodeforms mit einer anderen Funktionalitaet zu versehen.

------------------------
Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

Moin Die Abfrage <?php

Eingetragen von messy (116)
am 25.04.2009 - 11:52 Uhr

Moin

Die Abfrage

<?php
$form
['#id'] == 'node-form'
?>
funktioniert doch. Weiß auch nicht, wo da gestern der Haken war!?

Der Wurm steckt in

<?php
$form
['#node']['type'] == 'students_personality_inf'
?>
Man kann ein stdClass object nicht wie ein array behandeln.

Wenn ich

<?php
$form
['#id'] == 'node-form' && $form['#node']->type == 'mein-typenname'
?>
als Abfrage nehme klappt es wunderbar.

Danke für den Tipp mit dsm($form);. Diese Scrollbalken sind sehr nützlich.

Bei mir sind das alles Bindestriche. Ist nicht bei D6 alles mit Unterstrichen?
_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast Recht und es ist

Eingetragen von quiptime (4972)
am 25.04.2009 - 12:59 Uhr

Hast Recht und es ist logisch. $form['#node'] repraesentiert das Node Object und ist daher auch dementsprechend mit -> anzusprechen.

Um sich nicht selbst zu vewirren und der Ordnung halber kann man im form_alter die Zeile

$node = $form['#node']

einfuegen und danach mit der Node-Variablen-Syntax weiterarbeiten. nach dem Motto

<?php
$node
= $form['#node'];
 
if (
$form['#id'] == 'node-form' && $node->type == 'mein-typenname')
?>

Sorry fuer die kleine Freud'sche Fehlleistung beim schnellen posten weiter oben.

------------------------
Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

$node = $form['#node'] ist

Eingetragen von messy (116)
am 25.04.2009 - 13:19 Uhr

$node = $form['#node'] ist natürlich sinnvoll, besonders weil ich damit danach noch weiter arbeite.

Der Vollständigkeithalber hier nochmal die endgültige hook_form_alter:

<?php
function meinmodul_form_alter($form_id, &$form) {
$node = $form['#node'];
if (
$form['#id'] == 'node-form' && $node->type == 'mein_nodetyp') {
    foreach (
element_children($form) as $child) {
     
$field = content_fields($child, $node->type);    
      if (
$field) {
        if (
$field['type'] == 'image') {
           
$form[$child]['#collapsible'] = false;
        }
      }
    }
  }
}
?>

_____________________________________________________
IRC Server: chat.freenode.net
Channel: #drupal.de

Für mehr User im Channel!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 13 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 3 Tagen
  • In der entsprechenden View
    vor 3 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 3 Tagen
  • gelöst
    vor 6 Wochen 10 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 1 Benutzer und 27 Gäste online.

Benutzer online

  • ian_radnor

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association