Boolean/Logikai mező címkéje Single on/off checkbox widgetnél nem látszik!

Sk8erPeter képe

Sziasztok!

A Boolean/Logikai mezők esetén, "Single on/off checkbox" ("Egyszerű be/ki jelölőnégyzet") widget használata esetén azt szeretném, ha az alapértelmezett On/Off értékek (1/0) helyett az On-érték címkéje látszana, emellé lehetne betenni vagy kiszedni a pipát.
Pontosan erre való a mező szerkesztésénél a "Use field label instead of the "On value" as label" ("A mező címkéjének használata a bejelölt állapot értéke helyett") beállítás.

Na most ez 7.19-ről 7.22-re, ill. 7.23-ra frissítés előtt emlékeim szerint tök jól működött, azóta viszont az űrlapon nem jelenik meg a címke, csak maga a checkbox. Érdekes, hogy másik 7.22-es és 7.23-as Drupallal, másik sminkekkel is próbálkoztam, Display Suite layouttal és anélkül is, és ugyanez a helyzet ezeknél a Drupaloknál is - igaz, nem friss változatok, hanem már egy ideje frissítgetem őket. Lehet, hogy nálam van valami tényező, ami a többi Drupalnál is egyezik, és ami miatt a frissítés után ez a funkció elromlott, de lehet, hogy bug - ezért kérem a segítségeteket.

Nálatok is fennáll ez a helyzet? Vagy nálatok helyesen működik? Tudtok kapcsolódó hibáról? Én keresgéltem, egyelőre nem találtam ilyet.

Ja, még a dolog pikantériája, hogy az admin-felületen (Seven-smink használatakor) a "Default value" ("Alapértelmezett érték") fieldsetben viszont látszik a címke, ahogy kell, csak a szerkesztőűrlapon nem!

Egy screenshot a dolog egyértelműbbé tétele érdekében:

A mező címkéjének használata a bejelölt állapot értéke helyett

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Sk8erPeter képe

Konkrét példa 7.22-es tesztcélú Drupallal:

Field: Boolean, Single on/off checkbox

Boolean, Single on/off checkbox

"Use field label instead of the "On value" as label"
default értéknél látszik a címke:

Use field label instead of the On value as label

===========================================

LÉNYEG:
Űrlapszerkesztésnél nem látszik a címke, csak a leírás mező:

tartalom megjelenítésénél nem látszik a boolean-címke, csak a leírás mező

(hozzáteszem, ha bepipálom, az alapértelmezett 1-es értéknél úgy tűnik, nem jelenít meg semmit a view-ra kattintva sem, mert ezt nem oldották meg, hogy stringgé legyen konvertálva)

================================================
================================================
================================================

SZERK.:

Debuggolás során (Devel) is jól látszik, hogy a '#title' kulcs üres, bekereteztem:

#title kulcs üres

Átmenetileg tudom manipulálni hook_form_alter()-ből, de nyilván az okára kellene rájönni...

TIPP bárkinek?

0
0
szantog képe

ezt a jóisten sem fogja így kideríteni. Amit írtál, megcsináltam stepbystep, és minden ok. Ha ez egy szűz drupalon nálad így működik, akkor valami drupaltól független gáz van.

És ja, tényleg nincs ellátva különösebben display formatterekkel ez a mező, de a franc se tudja, nekem még sosem hiányzott, egyébként tán a views pl elég okos kis megjelenítéseket passzint hozzá - mondjuk ez nyilván nem segít ki.

Esetleg érdemes lenne boolean helyett egy mezei list fieldet odarakni.

3
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

Sk8erPeter képe

Köszi szépen, hogy kipróbáltad! Már ez is nagy segítség, mert ezek szerint szűz Drupal esetén jól működik, ergo nem bugról van szó, hanem nálam van a para: vagy smink (pl. egy theme_* v. template_* override, vagy más) vagy modul okozza. Teljesen szűz Drupalon is ki fogom próbálni.

Frissítés óta tapasztalom ezt a jelenséget, de Drush-sal a core-t és contrib modulokat egyszerre frissítettem (pl. Entity API, i18n, stb.), de most legalább kiderült, hogy nem a core, hanem vmi kiegészítő modul a hibás.

Még két kérdés:

  1. Ezek szerint nálad a megjelenítés során, a default 0/1 értékekkel kiírja rendesen a kiválasztott 0/1 értéket?
  2. A '#markup' kulcs az egyes elemekre egyszerűen a drupal_render()-ben állítódik össze, amit aztán megkap a theme_field() függvény, és pl. $variables['items'][0]['#markup'] módon érhető el? Az tiszta, hogy egy foreach-csel megy végig a $variables['items']-en kiíratáskor, majd megint átereszti a drupal_render() függvényen, de hátha van előtte valami formázó - igaz, pont azt írtad, hogy "tényleg nincs ellátva különösebben display formatterekkel ez a mező", de hátha van még egy hely, ahol véletlenül módosításra kerül az adat; megpróbálnám valahogy debuggolni, honnan eredhet a gáz.

    A list.module fájl list_field_info()-jában amúgy látszik a 'list_boolean' típus, az options.module-ban pedig az options_field_widget_info()-ban az 'options_onoff' widget, de innen sokkal tovább nem tudtam jutni, hogy akkor most mégis honnan kezdjem a debuggolást, hol veszhet el a #title vagy épp az érték.

Esetleg érdemes lenne boolean helyett egy mezei list fieldet odarakni.

Ez most nem bejövős megoldás, mert pont ez a ki/bekapcsolós rész kellene az űrlapra, így nagyon kényelmes lenne. De amúgy az ötlet nem rossz, meg lehetne kerülni ezzel a dolgot, de inkább ezt akarnám megoldani.

Addig is eléggé gányolósan, kényszerből manuálisan módosítottam a formban való megjelenését: egy hook_form_FORM_ID_alter()-ben (nyilván a FORM_ID-t cserélve a form azonosítójára) felülírtam a
$form['field_EZ_AZ_ÉN_MEZŐM']['und']['#title']
értékét, ami mérhetetlenül gáz, mivel így nyelvfüggő a megoldásom ('und'), meg amúgy is undorító módja a módosításnak, de most gyorsan kellett a dolog. Ha jut eszedbe kevésbé undorító kényszermegoldás, jelezd plíz. :D
Ja, a node/term megjelenítésekor látható érték (a default esetben 0/1), ami szintén nem jelent meg, kevésbé volt fontos, de azt is kényszermegoldással összetákoltam (sic!):
egy theme_field()-ben a foreach részt módosítottam (lásd az $element['#field_type'] === 'list_boolean' részt):

  1. // Render the items.
  2. $output .= '<div class="field-items"' . $variables['content_attributes'] . '>';
  3. foreach ($variables['items'] as $delta => $item) {
  4. // páros/páratlan jelölések
  5. $classes = 'field-item ' . ($delta % 2 ? 'odd' : 'even');
  6.  
  7. // ITT VAN A TÁKOLÓS, MÓDOSÍTOTT RÉSZ
  8. // TODO: checkboxnál a renderelés során az érték nem kerül kiíratásra, debuggolni kéne, a #markup részbe már NULL kerül
  9. // addig is ocsmány kényszermegoldás:
  10. if($element['#field_type'] === 'list_boolean'){
  11. if(empty($item['#markup'])){
  12. $item['#markup'] = (string)$element['#items'][$delta]['value']; // ebben defaultból 0 v. 1 van
  13. }
  14. }
  15.  
  16. $output .= '<div class="' . $classes . '"' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
  17. }
  18. $output .= '</div>';
0
0
szt képe

Egy próba esetleg: ha konkrétan beírod a "0" és "1" értékeket a default semmik helyett, az nem segít?

0
0
szt képe

És még egy tipp: nem az i18n rontja el?

2
0
Sk8erPeter képe

Hohóóó, te győztél! :) Megtaláltad a probléma forrását, pontosan erről van szó. Frissítettem 1.9-ről 1.10-re, és az űrlapon a megjelenítés máris jó :)
Itt a commit:
http://drupalcode.org/project/i18n.git/commitdiff/a184b48a92dc451022ddaa...

i18n 7.x-1.9:

i18n 7.x-1.9, Boolean field címke hiányzik

i18n 7.x-1.10, itt már JÓ:

i18n 7.x-1.10, Boolean field címke JAVÍTVA

Érdekes viszont, hogy a megjelenítés továbbra is rossz, nem jelenik meg a 0/1 érték. Ezt jelezni fogom az issue queue-ban.
Jó tudni, hogy nem nálam van a hiba. Köszönöm szépen a segítséget!

2
0