Bejárat > Uncategorized > Drupal 6.16 Profile modul multiple select

Drupal 6.16 Profile modul multiple select

A profile modulnak van egy “nagy” hátránya, hogy nincs benne multiple select. Ez komoly hátrány lehet akkor ha Drupal hajtotta weboldalunk felhasználóinak szeretnénk egy olyan lehetőséget adni, hogy egy multiple select segítségével kiválasszák pl hogy milyen nyelveken beszélnek stb.
Az alábbi leírás arról fog szólni, hogyan tudunk egy Profile modulba multiple selectet adni. 1 Lépés: készítsünk biztonsági mentést. 2. Lépés: Nézzük meg, hogy a mi Drupal verziónk 6.16 körüli-e és a Profile modulunk v 1.236.2.3 körüli. Ennél nagyobb és kisebb verzióknál már nem biztos hogy működni fog. De ennél tuti hogy jó.

Tehát nyissuk meg a profile.module fájlt és illesszük be az alábbi kódokat.
A sorok megközelítőleg vannak megadva.
A beillesztendő kódrészlet előtti utolsó kódsort is beírom
A + jeles sorokat kell beilleszteni.
A – jeles sorokat ki kell kommentelni

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#38
$output .= '<li>'. t('multi-line textfield') .'</li>';
+ $output .= '<li>'. t('multiselect list') .'</li>';
 
#244
 $edit[$field->name] = serialize($edit[$field->name]);
}
+ $value = ($field->type == 'multiselect') ? implode("\n\r",$edit[$field->name]) : $edit[$field->name];
 
- db_query("INSERT INTO {profile_values} (fid, uid, value) VALUES (%d, %d, '%s')", $field->fid, $user->uid, $edit[$field->name]);
+ db_query("INSERT INTO {profile_values} (fid, uid, value) VALUES (%d, %d, '%s')", $field->fid, $user->uid, $value);
 // Mark field as handled (prevents saving to user->data).
    $edit[$field->name] = NULL;
+  $value = NULL;  
 
#270
        case 'selection':      
        return $browse ? l($value, 'profile/'. $field->name .'/'. $value) : check_plain($value);
+     case 'multiselect':
+       $values = split("[,\n\r]", $value);
+         foreach ($values as $value) {
+           if ($value = trim($value)) {
+             $fields[] = $browse ? l($value, 'profile/'. $field->name .'/'. $value) : check_plain($value);
+           }
+         }
+     return implode(', ', $fields);
 
 
#352
      if ($field->type == 'list') {
            $output .= ' '. t('Put each item on a separate line or separate them by commas. No HTML allowed.');
      }
 
+     else if ($field->type == 'multiselect') {
+        $output .= ' '. t('You can select more then one option.');
+     }
 
#430
       case 'selection':      
           .....
           ....
           '#description' => _profile_form_explanation($field),
           '#required' => $field->required,
           );
       break;
+     case 'multiselect':
+        $options = array();
+        $lines = split("[,\n\r]", $field->options);
+        foreach ($lines as $line) {
+          if ($line = trim($line)) {
+            $options[$line] = $line;
+          }
+        }
+        $value = split("[,\n\r]", $edit[$field->name]);
+
+        $fields[$category][$field->name] = array('#type' => 'select',
+           '#title' => check_plain($field->title),
+           '#default_value' => $value,
+           '#options' => $options,
+           '#description' => _profile_form_explanation($field),
+           '#multiple' => TRUE,
+           '#size' => 'size="'. min(12, count($options)) .'"',
+           '#required' => $field->required,
+       );
+
+       break;
 
#591
'checkbox' => t('checkbox'),
+'multiselect' => t('multiselect'),

Ezzel lerendeztük a profile.module fájl beállításait.
Most nyissuk meg a profile.admin.inc fájlt a további beállítások elvégzéséhez.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#245
    if ($type == 'selection') {
        $form['fields']['options'] = array('#type' => 'textarea',
          '#title' => t('Selection options'),
          '#default_value' => isset($edit['options']) ? $edit['options'] : '',
          '#description' => t('A list of all options. Put each option on a separate line. Example options are "red", "blue", "green", etc.'),
        );
    }
+ if ($type == 'multiselect') {
+    $form['fields']['options'] = array('#type' => 'textarea',
+      '#title' => t('Selection options'),
+      '#default_value' => isset($edit['options']) ? $edit['options'] : '',
+      '#description' => t('A list of all options. Put each option on a separate line. Example options are "red", "blue", "green", etc.'),
+    );
+  }
 
#257
- if ($type == 'selection' || $type == 'list' || $type == 'textfield') {
+ if ($type == 'selection' || $type == 'list' || $type == 'multiselect' || $type == 'textfield') {

Nyissuk meg a profile.pages.inc fájlt:

1
2
3
4
5
6
7
8
#43
   case 'textfield':
   case 'selection':
+ case'multiselect':
 
#70
-     if ($field->type == 'selection' || $field->type == 'list' || $field->type == 'textfield' ) {
+    if ($field->type == 'selection' || $field->type == 'list' || $field->type == 'textfield' || $field->type == 'multiselect') {

Jó alaposan teszteljük le, az admin oldalon és a látogatói oldalon is, ha nem működik keressünk rá a google-on és nézzünk szét a drupal.org témákban.
Ha ezek után sem működik a kérdezz bátran.
És ha ekkor sincs megoldás akkor nézzük meg az 1. Lépést, és tegyük meg a megfelelő lépéseket.

  1. Még nincs hozzászólás
  1. Még nincsenek visszakövetések