Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Formular themen bzw erweitern auf Seite user/xxx/edit/category name

Eingetragen von Herr Lich (109)
am 03.04.2012 - 16:28 Uhr in
  • Allgemeines zu Drupal
  • Drupal 6.x oder neuer

Hallo,

da ich mir einen Wolf suche, dies und das probiert habe und bisher wie verloren in der Wüste stehe, muss ich echt mal euch Experten um Hilfestellung bitten.

Also es geht darum, daß ich für exakt eine Kategorie im Profile, welche ich mittels variable_get() [darin befindet sich der Name der Kategorie, welche ich vorab ausgewählt habe] vorgebe, das Formular so umarbeiten muss, daß a) für jedes Element ein eigener Slider zur Anwendung kommt und b) idealerweise ein 2. Slider pro Begriff in der gewählten Kategorie zur Verfügung steht und beide Werte dann gespeichert werden.

Diese Sache hatte ich schon einmal mit e107 und einer prototype slider.js gelöst, wo es aber pur php und html war. Das passt so aber nicht bei drupal.

Über HOOK_form_alter komme ich zwar genau an die entsprechenden Fehler heran, doch hab ich bisher noch nicht durchschaut, wie ich dort dann die Ausgabe der html Elemente beeinflussen kann. Versuche ich (stümperhaft, da in dem Bereich bisher noch unbescholten) dagegen über die template Funktion zu gehen, habe ich bisher noch keine Selektion auf genau diese eine Kategorie erreicht. Dann werden alle Felder unter user/*/edit geändert. Das ist aber gar nicht nötig.

Ich blicke es einfach nicht, was ich da wie anstellen muss. Ein Schubser in die richtige Richtung, daß ich (wirklich nur ) das Formular frei gestalten und mit weiteren html Elemten ausgeben kann, wäre phantastisch.

Oder muss ich sogar eine komplett eigene Funktion schreiben, die gar nicht auf form_alter bzw das template zugreift? Bin völlig ratlos im Moment, wo ich ansetzen muss.

Mit besten Grüßen
Rainer

‹ Einige Probleme nach Installation [gelöst] Drupal erzeugt selbständig ein a-Tag in Menu-Titel ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

So jetzt habe ich doch einen

Eingetragen von Herr Lich (109)
am 04.04.2012 - 00:23 Uhr

So jetzt habe ich doch einen Teilerfolg verbuchen können.

in der template.php hab ich folgendes drin:

<?php

if (variable_get('profile_graph_enabled', NULL)){
  function
MEINTHEME_theme($existing, $type, $theme, $path){


   return array(
   
'user_profile_form' => array(
     
'arguments' => array('form' => NULL),
     
'render element' => 'form',
     
'template' => 'user-profile-form',
     ),
   );
  }
}
?>

Und in der user-profile-form.tpl.php habe ich nun eine Weiche eingebaut.

<?php
$category
= $form['_category']['#value'];

#print $category;
   
switch($category) {

    case
'Neigungen':
   
$output='hier steht mein html code drin'

print $output;
break;
}

print
drupal_render($form);
?>

Dadurch habe ich wenigstens schonmal erreicht, daß meine eigene Ausgabe generiert wird. Blöderweise fehlt mir jetzt das komplette Fieldset und die Formularangabe nebst Speichern und Löschen Button. Aber ich komme Step by Step weiter.

Im html Code konnte ich mehrere Slider aktivieren, die auch unabhängig voneinander werkeln und ihre Daten ins entsprechende Input Feld übergeben. Jetzt muss ich noch die Daten filtern und den entsprechenden Input Feldern zuordnen. Es sieht auf den ersten Blick schon recht brauchbar aus.

Wenn mir jemand verrät, ob das nun der "sichere Weg" ist, über eine tpl Datei zu gehen, wäre ich mit dieser "Lösung" fast schon zufrieden. Allerdings hatte ich eigentlich vorgehabt, das in mein Modul mit zu integrieren. Solange ich nicht kapiere, wie man komplexe html Elemente dort unterbringt, wird das aber nichts.

Gibt es eigentlich eine elegante Lösung dafür, wie man die Daten aus dem Formular abfragen und neu aufbereiten kann? Ich habe jetzt einen recht umständlichen Weg über dprint_r ($form) genutzt und mir damit alle erforderlichen Daten Stückweise rausgefiltert und neu als Values eingetragen. Ich denke, da gibts sicher eine perfekte Möglichkeit seitens Drupal. Nur habe ich sie noch nicht entdeckt oder verstanden (wohl eher beides).

Hätte nicht gedacht, daß es so ausartet wegen der mehrfachen Slider :-(

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es scheint ein größeres

Eingetragen von Herr Lich (109)
am 05.04.2012 - 20:36 Uhr

Es scheint ein größeres Problem zu sein, da bis jetzt niemand eine Antwort gab (das ist keine Kritik!).

Ich hab jetzt nochmal alles überdacht und die tpl Datei und Funktion in der template.php verworfen, da ich die gewünschte Funktion in meinem Modul soweit passend hinbekommen habe. Es arbeitet alles wunderbar soweit.

Allerdings wäre es wünschenswert, zu jedem Textfeld im Formular ein 2. Textfeld gleichen Typs zu bekommen. Die Daten aus beiden Textfeldern müssten dann entweder Komma separiert oder gleich als serialized Data in der Tabelle profile_values gespeichert werden.

Gibt es da eine Möglichkeit über hook_form_alter das soweit zu erweitern? Zu diesem Fall habe ich bisher noch gar keine Lösung oder einen Hinweis gefunden.

Also es sieht jetzt so aus, daß ich mittels hook_form_alter das normale Textfeld als Slider Textfeld ausgeben kann.

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

 
$path = drupal_get_path('module', 'mymodule');
 
drupal_add_js("$path/js/slider.js");
 
drupal_add_js("$path/js/range.js");
 
drupal_add_js("$path/js/timer.js");

$count =0;
$div_height = variable_get('mymodule_input_height', NULL);
$div_width  = variable_get('mymodule_graph_input_width', NULL);
$category_field = variable_get('mymodule_category', NULL);
$pfields = _mymodule_get_field($category_field);


  if (
variable_get('mymodule_enabled', NULL) && variable_get('mymodule_category', NULL)){
 
$category = $form['_category']['#value'];
    switch (
$category) {

    case
$category_field:

     
drupal_add_css(drupal_get_path('module', 'mymodule') .'/mymodule.css');

     
$output ='';
     
$index =0;
      foreach (
$pfields as $pfield) {

      
$def_val = $form[$category_field][$pfield]['#default_value'];
      
$def_id  = str_replace(array('][', '_', ' '), '-', $pfield);

     
$form[$category_field][$pfield]['#type']   = 'slider_textfield';

     
$form[$category_field][$pfield]['#attributes'] = 'onchange="s'.$index.'.setValue(parseInt(this.value))"';
     
$form[$category_field][$pfield]['#field_prefix'] = '<table><tr><td><div class="slider" id="slider-'.$index.'" style="background-color: transparent; background-repeat: repeat-y; background-attachment: scroll; background-position: 0% 0%; background-clip: border-box; background-origin: padding-box; width: '.$div_width.'px; height: '.$div_height.'px; background-image: url("http://localhost/backup2/sites/all/modules/mymodule/images/bg4.h.gif"); background-size: '.$div_width.'px '.$div_height.'px;" tabindex="0">';


     
$form[$category_field][$pfield]['#field_suffix'] = '</div>
      <script type="text/javascript">

      var s'
.$index.' = new Slider(document.getElementById(\'slider-'.$index.'\'), document.getElementById(\'edit-'.$def_id.'\'));

      s'
.$index.'.onchange = function () {
        document.getElementById(\'edit-'
.$def_id.'\').value = s'.$index.'.getValue();
      };
      s'
.$index.'.onchange = function () {
        document.getElementById(\'label-'
.$def_id.'\').innerHTML = s'.$index.'.getValue();
      };
      s'
.$index.'.setValue('.$def_val.');
      window.onresize = function () {
        s'
.$index.'.recalculate();
      };
     </script>
     </td>
     <td>
     <span id="label-'
.$def_id.'" >'.$def_val.'</span></td>
     </tr>
     </table>'
;

     
$index++;
     }
     break;
    }
    return
$form;
  }
}
?>

Wenn das nicht realisierbar ist, ein weiteres Textfeld einzubinden, muss ich mich nach einer anderen Lösung umsehen. *seufz*

Ich hoffe mal, es stellt eine Herausforderung dar, diesen Fall mal zu durchleuchten, ob es machbar ist. Wenn ja, bitte nicht nur mit "ja das geht....()" antworten ;-)

Schönen Gruß
Rainer

  • 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 3 Tagen 1 Stunde
  • Hey danke
    vor 3 Tagen 20 Stunden
  • Update: jetzt gibt's ein
    vor 4 Tagen 14 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 2 Tagen
  • Da scheint die Terminologie
    vor 1 Woche 2 Tagen
  • Kannst doch auch alles direkt
    vor 1 Woche 6 Tagen
  • In der entsprechenden View
    vor 1 Woche 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 6 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 11 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