Date mező alapértelmezett szövegének cseréje - avagy amikor kevés a _form_alter

Kategória: 
Leírás
Date mező alapértelmezett szövegének cseréje - avagy amikor kevés a _form_alter

Időnként agybajt lehet kapni a drupaltól, hogy ilyen pici apróság megváltoztatása, mint egy alapértelmezett szöveg a date modulban, mennyire bonyolult. Pedig nem az, csak sokszor kideríteni nehéz, hogy merre kell nyúlkálni, most is jó időbe telt, mire erre rájötten, még friss az élmény, úgyhogy levésem gyorsban.

Nos, a date mezővel nincs többé ilyen gond, lássuk mi a helyzet, amikor már kevés a hook_form_alter ahhoz, hogy egy form bizonyos beállításait megváltoztassuk.

Szóba jöhet egyébként preprocess és egyéb varázslás is, igen ám, de kizárólag a sminkrétegből nem érünk el olyan adatokat (például az egész $form tömb), amikre esetleg szükségünk van.

Itt jegyezném meg, ha netán valami zöldséget látnál, ne habozz kommentelni, a leírtak egy részét az elmúlt órákban szedtem össze.

Nézzünk be először picit a form api mögé. Ahogy az a form apiban meg van írva, ahhoz, hogy egy form elemet a drupal kirajzoljon, meg kell adni az elem típusát, hogy például checkbox, radio vagy sima szöveges mező kell a formra. Ezekkel mindenki találkozott már, aki valaha kódból készített formot, netán hook_form_alterrel befolyásolt egy-egy elemet.

Nos, ezek az elemtípusok drupalban az ún. element-ek. A drupal saját maga is definiál egy csomó elementet (legyen már ezek után formelem típus, mert összeakad a nyelvem, ahogy hangosan olvasom..), ezek azok, amik a form api referenciaoldalán találhatók a táblázat fejlécében.

Íme egy példa a core-ból:

[geshifilter-drupal6]$types['button'] = array( '#input' => TRUE, '#name' => 'op', '#button_type' => 'submit', '#executes_submit_callback' => FALSE, '#limit_validation_errors' => FALSE, '#process' => array('ajax_process_form'), '#theme_wrappers' => array('button'), );[/geshifilter-drupal6]

Ezeket a formelem típusokat a hook_element_info() függvény implementálásával lehet deklarálni. Látszik, hogy sok default értéket lehet hozzákapcsolni, saját validációs függvényt, sminkfüggvényt, feldolgozófüggvényt stb.

Na és itt jön a képbe a date modul. Az a kis szemét nem átallott saját elemtípust készíteni, és természetesen jó mélyen belekódolta azt szöveget, amit nekünk le kell cserélni. Na és vajon hogyan lehet beleszólni vajon a hook_element_info()-ban deklarált változókba? Naná, hogy a hook_element_info_alter() megvalósításával.

Amúgy ha kiváncsiak vagyunk, hogy milyen elemtípusok vannak a rendszerünkben, csináljuk meg ezt, lesz ám meglepi:

[geshifilter-drupal6]function MODULNEVE_element_info_alter(&$type) { dsm($type); }[/geshifilter-drupal6]

Akkor vissza a date elemtípushoz: Ő deklarál magának egy #process függvényt, amivel a sminkfüggvényéhez készíti elő az adatokat. Nos, az sehol nincsen megszabva, hogy egyetlen #process függvényünk legyen, csapjuk tehát hozzá a sajátunkat, és módosítsuk azt, ami nekünk kell:

[geshifilter-drupal6] /** * Implementation of hook_element_info_alter(). */ function MODULNEVE_element_info_alter(&$type) { if (isset($type['date_text'])) { //We need a custom process function to modify some text $type['date_text']['#process'][] = 'MODULNEVE_text_element_process'; } } /** * Modify default description was set in date date_text process * * @param array $element * @return array * the timezone form element * * @see date_text_element_process($element, $form_state, $form) */ function MODULNEVE_text_element_process($element, $form_state, $form) { //Itt bújt el a description $element['date']['#description'] = ' ' . t('Format: mm/yyyy (eg. @date)', array('@date' => date_now()->format($element['#date_format']))); return $element; }[/geshifilter-drupal6]

Igazából ennyi az egész. Igen ám, de honnan tudjam meg, hogy éppen nekünk az hook_element_info_altert kell bántani? Hát ez egy marha jó kérdés.. Én most úgy csináltam, hogy fogtam a devel_themert, belekattintok a legbelső form elemre, és elkezdtem a devel_themer ablakában visszafelé lépkedni a függvényeken. Aztán vagy rájövök valamire, vagy nem..

Előtte persze próbálkoztam hook_form_alterben debugolni, de ott sem találtam értelmeset. Talán ott érdemes megfogni, hogyha form_alterben egy legbelső elem #type értéke valami egzotikus, akkor érdemes megnézni az emlegetett hook_element_info_alterben.

Hozzászólások

Howdy I am so thrilled I

Howdy I am so thrilled I found your blog page, I really found you by
accident, while I was searching on Google for something
else, Regardless I am here now and would just like to say
thanks for a fantastic post and a all round enjoyable blog (I also love the theme/design), I don't have time to go through it
all at the moment but I have bookmarked it and also included your RSS feeds, so when I have time I will
be back to read a lot more, Please do keep up the superb work.

Greetings! This is my first

Greetings! This is my first visit to your blog! We are a team of volunteers and starting a new initiative
in a community in the same niche. Your blog provided us valuable information to work on. You have done a extraordinary job!

This design is spectacular!

This design is spectacular! You most certainly
know how to keep a reader amused. Between your wit and your videos, I was almost moved to start my own blog (well, almost...HaHa!) Fantastic job.
I really enjoyed what you had to say, and more than that, how you presented it.
Too cool!

Thanks for every other

Thanks for every other magnificent post. The place else may anybody
get that type of information in such a perfect approach of writing?

I have a presentation next week, and I'm on the look for such info.

I read this paragraph fully

I read this paragraph fully on the topic of the comparison of most recent and earlier
technologies, it's remarkable article.

Thank you a bunch for sharing

Thank you a bunch for sharing this with all people you actually recognise what you're talking approximately!

Bookmarked. Kindly additionally discuss with my site =).
We will have a link alternate arrangement between us

What's up friends, its great

What's up friends, its great post about cultureand fully explained, keep it up all the time.

There are several famous

There are several famous outboard motor brands, such as Yamaha Outboard Motor, Suzuki Marine, Honda Marine and Mercury Marine. They are all hot sellers outboard engines around the world. Among them, Yamaha, Suzuki and Honda are all made in Japan. They are welcomed by the people Worldwide.

According to the engine type, the Yamaha Outboard Motors have 4 stroke and 2 stroke type. The 4-stroke engine tends to be more sophisticated than a 2-stroke option as ignition process is split into several different cycles. So the Yamaha 4 Stroke Outboard is more popular than the 2 stroke.

The Yamaha Outboard Engine has strong horsepower and beautiful outer, you will like it when you give a glance at. So Yamaha 150 Outboard is your first choice.

When you consider buying an outboard motor, Suzuki Marine and Honda Marine are also in your list. Both of them are in fashionable design and have power horsepower.

If you have a boat you can buy a Suzuki Outboard Motor to fit on it, with which you can go to the deep sea for fun and fishing, and you fish more fishes with and outboard engine.

Yamaha Outboard Sale brand new and good condition outboard motors and you can get promotion prices and enjoy free delivery.

Hozzászólás

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.
Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.