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

  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.
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

Great looking site. Presume

Great looking site. Presume you did a bunch of your own html coding.

Really....this is a

Really....this is a beneficial web page.

Thanks for the purpose of

Thanks for the purpose of supplying these types of superb content material.

I appreciate looking at your

I appreciate looking at your websites. Many thanks!

Incredibly individual

Incredibly individual friendly site. Huge information offered on few gos to.

I enjoy this site - its so

I enjoy this site - its so usefull and helpfull.

You've gotten very good info

You've gotten very good info at this point.

Excellent page, Carry on the

Excellent page, Carry on the good job. Regards!|

How goes it, very good online

How goes it, very good online site you've got in here.

I adore this site - its so

I adore this site - its so usefull and helpfull.

Awesome webpage you've in

Awesome webpage you've in here.

I appreciate the content on

I appreciate the content on your website. Thanks a ton.

Great looking site. Presume

Great looking site. Presume you did a bunch of your very own html coding.

Thanks meant for delivering

Thanks meant for delivering these kinds of fantastic info.

Wow....such a useful internet

Wow....such a useful internet site.

Basically had to tell you Now

Basically had to tell you Now i'm lucky I stumbled on your website!|

byvqr5 fotbollströjor

byvqr5 fotbollströjor ch8ftinzvu p4c72d8vq billige fodboldtrøjer xjabocif ikhfb6y8r fotballdrakter barn u61ajsy foyqphj91i maglie calcio a poco prezzo djgbiq

Sustain the awesome work !!

Sustain the awesome work !! Lovin' it!

thank a lot for your internet

thank a lot for your internet site it assists a lot.

cheonmugeuk. ttlink.

artdaejeon. anti-corruption.

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.