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

problem mit hook_form_alter()

Eingetragen von Shademan (82)
am 24.06.2009 - 13:27 Uhr in
  • Modul-Entwicklung

Hallo,

ich baue gerade eine mehrsprachige Webseite.
Wenn man Content einstellt kann dieser entweder auf "language neutral", "deutsch" oder auf "türkisch" sein.
Das macht das locale modul. Es stellt dann im node/add -formular eine selectbox dar, wo man die drei optionen
wählen kann.
Allerdings will der Kunde das man nur deutsch oder türkisch wählen kann, also habe ich versucht die "language neutral"
option mittels hook_form_alter() aus dem formular zu entfernen.
Das klappt aber nicht...

ich kann zwar:
a) das komplette eingabe feld löschen mit: unset($form['language']);
b) alle optionen löschen mit: unset($form['language']['#options']);

ich kann auch den inhalt des arrays '#options' ändern (wenn ich es mit dpm() anzeige ist alles so wie es sein soll),
aber dann anschliessend sind im dargestellten formular TROTZDEM alle optionen wieder vorhanden.

Warum wird meine Änderung wieder "überschrieben"? Was mache ich falsch?

Gruß,
Sebastian

‹ Trotz Batch "maximum execution time exceeded" [gelöst] dropdown menü realisieren? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Code

Eingetragen von stBorchert (6003)
am 24.06.2009 - 13:48 Uhr

Zeig doch mal Deinen Code.

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

da gibt es nicht viel zu

Eingetragen von Shademan (82)
am 24.06.2009 - 14:39 Uhr

da gibt es nicht viel zu zeigen. ich entferne mit array_shift($form['language']['#options']); das erste element aus dem optionen-array. es ist dann auch weg (dpm($form) sagt das ;) aber im gerenderten formular ist die option dann wieder vorhanden.

habe auch versucht das #options array komplett zu ersetzen $form['language']['#options'] = array ("a"=>"aaa", "b"=>"bbbb");
aber dann sind im formular trotzdem die ursprünglichen optionen drin.

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

das gleiche problem (es tut

Eingetragen von Shademan (82)
am 24.06.2009 - 14:49 Uhr

das gleiche problem (es tut sich nichts) tritt auch auf, wenn ich versuche mittels hook_form_alter() gewisse dinge in einer selectbox vorzuselektiern (also #default_value zu ändern).

gibt es noch andere möglichkeiten an einem formular herumzudoktorn?

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_alter

Eingetragen von stBorchert (6003)
am 24.06.2009 - 15:27 Uhr

hook_form_alter ist der (einzig wahre) Weg, in dieser Art Änderungen an den Formularen vorzunehmen.
Ohne jedoch Deinen Code zu sehen, kann ich eventuelle Kunstfehler Deinerseits nicht erkennen.

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

der code ist eigtl. nicht

Eingetragen von Shademan (82)
am 24.06.2009 - 15:59 Uhr

der code ist eigtl. nicht mehr als die eine zeile von oben ;)

aber extra für dich:

function meinmodul_form_alter(&$form, $form_state, $form_id)
{
        if($form_id=='rezept_node_form') {
                $bla = array_shift($form['language']['#options']);
                dpm($form);   //<- hier sieht man das das element wirklich RAUS ist.
        }
}

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_alter() vs. hook_translation_form_alter()

Eingetragen von quiptime (4972)
am 24.06.2009 - 16:40 Uhr

Mit form_alter zu arbeiten ist kein rumdoktern.

Zu Deinem Problem.

Hast Du statt dem "normalen" hook_form_alter() schon den hook_translation_form_alter() getestet?

hook_translation_form_alter() schrieb

* Add translation option to content type form.
* Alters language fields on node forms when a translation is about to be created.

und eventuell

Modul "Preserve language"?

Moeglicherweise erspart Dir "Preserve language" ein form_alter.

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Snipped als Ideen-Anreger

Eingetragen von quiptime (4972)
am 24.06.2009 - 16:38 Uhr

form_alter im i18n Modul (i18n.module)

<?php
function i18n_form_alter(&$form, $form_state, $form_id) {
  switch (
$form_id){
 
...
  
    default:
     
// Extended language for node edit form
     
if (isset($form['#id']) && $form['#id'] == 'node-form') {
        if (isset(
$form['#node']->type) && variable_get('language_content_type_'. $form['#node']->type, 0)) {
         
$form['language']['#options'] = i18n_node_language_list($form['#node'], TRUE);
        }
      }
?>

Eventuell hilft Dir das Snipped als Ideen-Anreger.

Beachte die Problematik bei Nodetypes die keine Multilanguage-Nodetypes sind. Eventuell gibt es da ein Problem wenn generell language neutral fehlt. Must Du testen.

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

mhh.. interessant. wie man

Eingetragen von Shademan (82)
am 25.06.2009 - 09:26 Uhr

mhh.. interessant. wie man an letzterem codeschnipsel sieht macht i18n_form_alter genau das selbe und da funktioniert es...

jetzt hab ich auch keine idee mehr, aber danke für die vielen anregungen!

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sofern das Problem noch

Eingetragen von jbiechele (1)
am 25.09.2009 - 14:09 Uhr

Sofern das Problem noch existiert und vielleicht zur Doku für Interessierte
hier ein Link zur Lösung des Problems:

http://drupal.org/node/250891
http://drupal.org/node/250891#comment-2041110

Und hiermit kann die Option "Language neutral" aus der Language Selection Liste entfernt werden:

unset($form['language']['#options'][$translation->language]);

  • Anmelden oder Registrieren um Kommentare zu schreiben

andere lösung

Eingetragen von gingebaker (1)
am 20.05.2010 - 13:09 Uhr

sofern das Problem immer noch besteht. Bei mir hat eine sehr simple Lösung funktioniert.

Ich musste meinem Modul das ich selbst angelegt hatte eine höhere "Weight" als das i18n Modul hat gegeben. Bei mir reichte 101. Ansonsten kann man in der Tabelle "system" nachschauen.

folgender aufruf einmal in Modul oder sonstwo sollte reichen:
db_query("UPDATE {system} SET weight = [yournumber] WHERE name = 'yourmodulename'");

mehr infos hier: http://drupal.org/node/110238

Mein form_alter sieht z.b. so aus. Um bei einer bestimmten node edit form nur die vom user voreingestellte Sprache in der Select Box anzuzeigen.

<?php

function meinmodul_form_alter(&$form, &$form_state, $form_id) {
  
// you need more weight than i18n module
   //db_query("UPDATE {system} SET weight = 101 WHERE name = 'meinmodul'");
 
if($form_id == "news_node_form") {
      global
$user;
    if(isset(
$user->language) && $user->language && in_array("importeure",$user->roles)) {
       
// do it only with importeure wich have a preferred language
       
if(array_key_exists($user->language,$form['language']['#options'])) {
           
// delete all other languages from options select
           
$form['language']['#options'] = array($user->language => $form['language']['#options'][$user->language]);
        }
    }
  }
}

?>

  • 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 14 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 11 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 0 User und 25 Gäste online.

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