A Drupal kereső doboz átalakítása és a tanulság

A Drupal alapértelmezett kereső dobozának átalakítása nem túl nagy kihívás: sima form, egy kis preprocess, hogy eltüntessem a Submit gombot, Lecserélem a kereső doboz feliratát, css-el az input doboz mérete beálltva, kész. Eddig az elmélet...

Barátunk a Google elmondta, hogy merre találok információt arról, amit csinálni szeretnék: Customizing the search form a Drupal.org-on. Nagyszerű, már van is a témában egy írás - thx!

Drupal kereső doboz, theme developer, nagyító, gyors ps munka Teljesen jó a leírás: a függvényt bemásoltam a saját sminkem template.php-jába, átírtam néhány dolgot: függvény neve a smink nevéhez igazítása, a form cím törlése, az  alapértelmezett kereső mező felirat átírása. Mentés, theme cache törlése, böngészőben frissítés. És nem történik semmi!

Átnéztem újra, minden rendben lévőnek tűnik. Cache törlés, frissítés. Semmi. [censored]. Átnéz, cache töröl, újratölt. Semmi. [censored] [censored] [censored]

Nézzük theme developer mit mond? 

template_preprocess + template_preprocess_search_theme_form + custom_breadcrumbs_preprocess + custom_breadcrumbs_paths_preprocess

De hol a saját sminkem preprocess függvénye? #drupal.hu irc csatornán sikítok, semmi. Korán van még...

Ekkor jutott eszembe, hátha ez is úgy működik, mint a box.tpl.php-ból származó box.tpl-ek átírása: ott kell lennie a saját sminkben egy box.tpl.php-nek, különben nem veszi észre a leszármazottait a smink motor. Hiba vagy feature? Nem tudom, ez ilyen jelenleg, hozzá kell szokni, megtanulni, haladjunk.

Készítettem egy sminkemneve_preprocess(&$vars, $hook) {} függvényt, ami, mint látszik is nem csinál semmit, üres. Ennyi, innentől a smink rendszer megtalálja az én személyre szabott preprocess függvényemet is! Ennyi szerettem volna elérni, feladat megoldva.

Tanulság: mindig legyen saját template_preprocess()-ed! :) De a nevét azért írd át!

Még egy kis trükk a végére:

// Add a custom class and placeholder text to the search box $vars['form']['search_theme_form']['#attributes'] = array('class' => 'NormalTextBox txtSearch', 'onfocus' => "if (this.value == this.defaultValue) {this.value = '';}", 'onblur' => "if (this.value == '') {this.value = this.defaultValue;}");

Így csak egyszer kell beírni az űrlap mező alapértelmezett értékét. Ha rákattintunk a mezőre a felirat eltűnik, ha nem modósítottuk még a szöveget és a form elemről „elkattintunk” akkor az eredeti felirat visszakerül. Ha már beírtunk valamit, akkor elkattintáskor az marad. Dübörög az UX, mindenki elégedett!

Hozzászólások

balazgabi képe

egy #search-block-form .form

egy

#search-block-form .form submit {
text-indent: -999px;
background-image: url(images/button.gif)}

nem lett volna elég?

Pontosabban azt szeretném megtudni, ha én CSS-ből intéztem el, akkor annak mi lehet a hátránya? Működni működik, ezért kérdezem.

 
Den képe

De, valószínű, elég ha

De, valószínű, elég ha css-ből tűnteted csak el. Most én teljesen el akartam tüntetni, hogy a html kimenetben se legyen ott.

Illetve, a formnak mindig van befoglaló div-je, aminek van magassága, háttere, esetleg kerete. Sokkal jobb az egész befoglaló div-et eltüntetni, így nem a submit, hanem a befoglaló elemet célszerű a css szabályba felvenni.

 
CSÉCSY László képe

Remek. Az okát is meg tudnád

Remek. Az okát is meg tudnád osztani? Miért kell ez a függvény, illetve miért elég, ha üres?

 
Den képe

A pontos okot sajnos nem

A pontos okot sajnos nem tudom. A preprocess függvényem nem találja meg, ha nincs ott ez a "globális" preprocess. Érdemes lenne a theme layer preprocess fv javaslatok előállítási részt megvizsgálni, hogy mi az oka. Erre nem volt időm eddig.

Gyanítom, hogy olyasmi, mint a mikor a blokkod block.tpl-jét akarod átírni: a "block.tpl.php"-nak lennie kell a sminkedben, különben nem találja meg a blokkomneve-block.tpl.php-t. Bizonyítékom nincs rá, csak sejtem! :)

 
thamas képe

Van modul is, ami ezt

Van modul is, ami ezt megoldja - meg sok egyebet még: http://drupal.org/project/custom_search

Persze a saját kód az saját kód... :o)

 
Den képe

Ismerem a modult, de két

Ismerem a modult, de két ilyen kis dologért nem kell egy teljes modul funkcionalitása...

 
EdgarPE képe

Az utolsó kis JavaScript

Az utolsó kis JavaScript részhez egy kiegészítés, amit én is rendszeresen el szoktam felejteni: ha az alapértelmezett szöveg van a kereső beviteli mezőjében és a felhasználó rákattint a keresés (submit) gombra akkor rá fog keresni az alapértelmezett kifejezésre :)

Érdemes a submit gomb onclick eseményénél is vizsgálni az input mező értékét és nem engedni a kattintást, vagy üresbe állítani a beviteli mezőt.

 
Den képe

Teljesen jogos a felvetés!

Teljesen jogos a felvetés! Köszönöm!

 

Hozzászólás

A mező tartalma nem nyilvános. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • A webcímek és email címek automatikusan kattintható hivatkozásokká alakulnak.
  • Engedélyezett HTML jelölők: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <span> <div>
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.

További információ a formázási lehetőségekről

 
 
 

Friss bejegyzések

Drupal 7 és a képek

Drupal 7 képek kezelése
18 hozzászólás

Drupal 7 telepítése CPANEL tárhelyre

Drupal 7 telepítése CPANEL tárhelyre
11 hozzászólás

Avatarfotók a táborból

Üres és kihalt a tábor helyszíne
4 hozzászólás