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

[gelöst] Views Ajax Block Validation Nachricht

Eingetragen von Anonymous (0)
am 05.05.2014 - 08:56 Uhr in
  • Views
  • Drupal 7.x

Hallo zusammen

Ich habe die Frage auch hier gepostet: http://stackoverflow.com/questions/23467510/drupal-views-ajax-block-validation-message.

Ein Views Block mit Ajax und exposed Filtern. Funktioniert alles super. Doch die Validation-Messages werden erst nach dem erneuten Laden der Seite angezeigt. Kann mir da jemand weiterhelfen?

‹ [gelöst] Einen Block mit View generieren der Inhalt gemäss URL und Taxonomie anzeigt [gelöst] Views Ajax Block Validation Nachricht ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Moin,was dir in deinem

Eingetragen von glycid (921)
am 10.05.2014 - 17:52 Uhr

Moin,

was dir in deinem Beispiel fehlt, ist der Ajax Callback, nachdem der User seine Eingabe in das entsprechende Feld getätigt hat. Das kannst du z.Bsp. so lösen (array_unshift und _custom_form_validate brauchst du dann nicht:

<?php
function hook_form_alter(&$form, &$form_state, $form_id) {
  if(
$form['#id'] === 'id_from_views') {
  
$form['feld_des_inputs']['prefix'] = '<div id ="foo">'; //braucht JS als Selector für die Message
  
$form['feld_des_inputs']['suffix'] = '</div'>;
  
$form['feld_des_inputs']['#ajax'] = array('callback' => 'ajax_load');

     if(!empty(
$form_state['values']['field'])) {
      
$message = t('Custom error message.');
      
drupal_set_message($message, $type = 'error', $repeat = FALSE);
     }
   }
}

function
ajax_load($form, &$form_state) {
 
$commands = array();
 
$commands[] = ajax_command_replace("#foo", drupal_render($form['feld_des_inputs']));
 
$commands[] = ajax_command_prepend("#foo", theme('status_messages'));
  return array(
'#type' => 'ajax', '#commands' => $commands);
}

?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hey Vielen Dank! Macht

Eingetragen von FeanorCC (nicht überprüft) (0)
am 11.05.2014 - 10:06 Uhr

Hey Vielen Dank! Macht irgendwie Sinn, werde ers sobald ich dazu komme testen und ein Feedback geben! Nochmals vielen Dank!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi glycidSo ich habe es nun

Eingetragen von FeanorCC (nicht überprüft) (0)
am 12.05.2014 - 09:13 Uhr

Hi glycid
So ich habe es nun getestet, und funktioniert noch nicht wirklich. Also genau genommen geschieht gar nichts.

Mit folgendem Code hab ichs getestet:

<?php

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if(
$form['#id'] === 'form_id') {
   
$form['custom_input_field']['#prefix'] = '<div id ="foo">';
   
$form['custom_input_field']['#suffix'] = '</div>';
   
$form['custom_input_field']['#ajax'] = array('callback' => 'ajax_load');

     if(!empty(
$form_state['values']['custom_input_field'])) {
      
$message = t('Custom error message.');
      
drupal_set_message($message, $type = 'error', $repeat = FALSE);
     }
  }
}

function
ajax_load($form, &$form_state) {
 
$commands = array();
 
$commands[] = ajax_command_replace("#foo", drupal_render($form['custom_input_field']));
 
$commands[] = ajax_command_prepend("#foo", theme('status_messages'));
  return array(
'#type' => 'ajax', '#commands' => $commands);
}

?>

Wenn ich die Form ausgebe, sind die Prefix, Suffix, und Ajax- Attribute wie gewünscht gesetzt worden.

Oder hab ich da etwas übersehen? Vielleicht nochmals zu erwähnen ist, dass es sich um einen Exposed-Filter einer View handelt, respektive funkt da irgendein Views-Handler oder so dazwischen...

Ach ja und die ich musste #prefix und #suffix MIT hashtag setzten, dies war bei deinem Beispiel anders.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, die Hashtags hatte ich

Eingetragen von glycid (921)
am 12.05.2014 - 10:12 Uhr

Ja, die Hashtags hatte ich vergessen. Das ist schon korrekt so. Hm, ich hab das so oder so ähnlich mehrfach im Einsatz, um bestimmte Formular- Eingaben direkt zu validieren. Kannst du mal mit

dpm ($form_state['input']['custom_input_field'];

prüfen, ob da die Eingaben im Array sind und mal statt

drupal_set_message($message, $type = 'error', $repeat = FALSE);

mal
dpm ($message);

innerhalb der if() Anweisung ausgeben lassen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was ich auch nicht ganz

Eingetragen von glycid (921)
am 12.05.2014 - 10:29 Uhr

Was ich auch nicht ganz verstehe, dass du mit

if(!empty());

prüfst. Da wird $message doch immer ausgegeben, wenn der User etwas eingibt....

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also ich habe die Zeile <?php

Eingetragen von FeanorCC (nicht überprüft) (0)
am 12.05.2014 - 10:43 Uhr

Also ich habe die Zeile

<?php

if(!empty($form_state['values']['custom_input_field'])) {

?>

in

<?php

if(!empty($form_state['input']['custom_input_field'])) {

?>

geändert. Da mit dem 'values'-Attribut per dpm() nie etwas ausgegeben wurde. Mit dem Input Attribut allerdings schon. Funktioniert aber immer noch nicht. Die Message wird dann auch korrekt abgefüllt und drupal_set_message ausgeführt. Allerdings erst wieder beim Page-Reload. Somit bin ich am selben Punkt wie zu Anfang. Irgendwie wird die Funktion ajax_load() nicht aufgerufen. Wenn ich dort ein dpm() setzte oder gar ein exit() passiert gar nichts.

Noch eine Frage: Das custom_input_field ist ein normales Textfeld. Wie kann es also überhaupt ein Callback wie ajax_load besitzen? Respektive wann wird dieser Callback genau ausgelöst? Ich denke da könnte das Problem liegen. Bei einer Selectbox zum Beispiel wird der Ajax-Callback bei der Auswahl eines neuen Wertes gesetzt, wie ist es aber beim Textfeld? Entweder beim Form-Submit oder oder bei der Eingabe von Text... Weisst du was ich meine?

Gruss Feanor

  • Anmelden oder Registrieren um Kommentare zu schreiben

glycid schrieb Was ich auch

Eingetragen von FeanorCC (nicht überprüft) (0)
am 12.05.2014 - 10:46 Uhr
glycid schrieb

Was ich auch nicht ganz verstehe, dass du mit

if(!empty());

prüfst. Da wird $message doch immer ausgegeben, wenn der User etwas eingibt....

Korrekt! Dies aber bloss zum testen, danach werd ich schon eine andere Prüfung unterziehen. So jedoch ist es einfach zu prüfen, ob es überhaupt funktioniert.

  • Anmelden oder Registrieren um Kommentare zu schreiben

FeanorCC schriebDas

Eingetragen von glycid (921)
am 12.05.2014 - 11:19 Uhr
FeanorCC schrieb

Das custom_input_field ist ein normales Textfeld

Dann kann natürlich kein Aufruf erfolgen. Es sei denn, der User drückt die Enter- Taste. Wenn es unbedingt ein Textfeld sein muss, brauchst du noch ein geeignetes Trigger Element, das den Callback auslöst. Das kann ein weiteres Feld mit einer Select List oder ein Submit Button sein.

Edit: Da hätte ich natürlich auch gleich mal dran denken können....

  • Anmelden oder Registrieren um Kommentare zu schreiben

glycid schrieb FeanorCC

Eingetragen von FeanorCC (nicht überprüft) (0)
am 12.05.2014 - 12:11 Uhr
glycid schrieb
FeanorCC schrieb

Das custom_input_field ist ein normales Textfeld

Edit: Da hätte ich natürlich auch gleich mal dran denken können....

Kein Problem, bei mir hats auch ein Weilchen gedauert, da dein Lösungsansatz etwas anders war.

Noch über einen andere Trigger zu gehen finde ich nun etwas sehr aufwendig. Vorallem da es eigentlich wie in meinem ersten Post super funktioniert, bloss die form_set_error() message wird erst beim page-reload angezeigt. Aber die Validation etc. funktioniert alles sauber über Ajax.

Ich hab's nun so gelöst:

<?php

function _custom_form_validate($form, &$form_state) {
if(!empty(
$form_state['values']['field'])) {
  
form_set_error('field', t('Custom error message.'));
  
drupal_add_js(array('my_module' => array('message' => theme('status_messages'))), array('type' => 'setting'));
  }
}

?>

Und in der Javascript Datei meines Modules:

var message;
Drupal.behaviors.setMessage= {
  attach: function (context, settings) {
    try{
      // Set the validation message
      var message_new = Drupal.settings.my_module.message;
      if(message_new.length > 0) {
        if(message_new != message) {
          message = message_new;
          $('#my_form_element').prepend(message);
        }
      }
    }
    catch(err){
    //Handle errors here
    }
  }
};

Dies Funktioniert exakt wie ich es wollte. Dennoch wäre es schön gewesen nicht über pures Javascript oder jQuery gehen zu müssen, da Drupal das eigentlich auch so können müsste. Bei einer selbst erstellten Form klappt die direkte Anzeige von Messages ohne Probleme, doch bei den Views-Exposed-Filtern sehe ich momentan keine andere Lösung. Falls jemand des Rätels Lösung weiss, ich warte gespannt darauf.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier ein anderer etwas

Eingetragen von FeanorCC (nicht überprüft) (0)
am 05.11.2014 - 16:12 Uhr

Hier ein anderer etwas einfacherer Lösungsansatz: http://stackoverflow.com/a/23825912/3043126

  • 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 Tagen 13 Stunden
  • Hey danke
    vor 3 Tagen 8 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 2 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 1 Tag
  • Da scheint die Terminologie
    vor 1 Woche 1 Tag
  • Kannst doch auch alles direkt
    vor 1 Woche 5 Tagen
  • In der entsprechenden View
    vor 1 Woche 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 5 Tagen
  • gelöst
    vor 4 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» 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 16 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