Search modul fejlesztése

pante képe

Sziasztok!

Problémám az lenne, hogy átalakítottam a search modul kódját, mivel nem tetszett az eredeti mérete és elhelyezkedése, viszont cserébe nem akar működni.

---eleje---
<div id="block-search-form" class="block block-search">

<form action="http://domain.hu/?q=search/node/" method="GET" id="search-block-form" accept-charset="UTF-8"><div><div class="container-inline">
<div class="form-item form-type-textfield form-item-search-block-form">
<input onclick="this.value=&#039;&#039;;" onfocus="this.select()" onblur="this.value=!this.value?&#039;Keresés...&#039;:this.value;" type="text" id="edit-search-block-form--2" name="search_block_form" value="Keresés..." size="12" maxlength="128" class="form-text" />
</div>
<div class="form-actions form-wrapper" id="edit-actions"><input type="submit" id="edit-submit" name="op" value="Keresés" class="form-submit" /></div><input type="hidden" name="form_build_id" value="form-nkTufJZivlbJOZAYJKlnrg_o3-GEC-Ehdw9LlRf-_84" />
<input type="hidden" name="form_id" value="search_block_form" />
</div>
</div></form> </div>
---vege---

Bármit írok be a kereső mezőbe csak betölti az oldalt újra és nem történik semmi.
Sanda gyanúm, hogy a generált value érték lesz a hunyó, de nem tudom, hogy tudok ilyen id-t dinamikusan generálni (alap search modul generálja magának) De miért nem lehet ezen hash érték nélkül keresni? Amikor az oldalamon való keresés nem kötött regisztrációhoz, se belépéshez.
Jelenleg ennyit hív meg a domain után: ?search_block_form=rakeresekvalamire&op=Keresés&form_build_id=form-nkTufJZivlbJOZAYJKlnrg_o3-GEC-Ehdw9LlRf-_84&form_id=search_block_form
Ehelyett: ?q=search/node/rakeresekvalamire

Remélem nagyjából érthetően vázoltam fel a problémát, elnézést ha nem világos.

Köszönöm a segítségeteket előre is!

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

http://jsbeautifier.org/
ezzel lehet HTML-t is szépíteni...

  1. <div id="block-search-form" class="block block-search">
  2. <form action="http://domain.hu/?q=search/node/" method="GET" id="search-block-form"
  3. accept-charset="UTF-8">
  4. <div>
  5. <div class="container-inline">
  6. <div class="form-item form-type-textfield form-item-search-block-form">
  7. <input onclick="this.value=&#039;&#039;;" onfocus="this.select()" onblur="this.value=!this.value?&#039;Keresés...&#039;:this.value;"
  8. type="text" id="edit-search-block-form--2" name="search_block_form" value="Keresés..."
  9. size="12" maxlength="128" class="form-text" />
  10. </div>
  11. <div class="form-actions form-wrapper" id="edit-actions">
  12. <input type="submit" id="edit-submit" name="op" value="Keresés" class="form-submit"
  13. />
  14. </div>
  15. <input type="hidden" name="form_build_id" value="form-nkTufJZivlbJOZAYJKlnrg_o3-GEC-Ehdw9LlRf-_84"
  16. />
  17. <input type="hidden" name="form_id" value="search_block_form" />
  18. </div>
  19. </div>
  20. </form>
  21. </div>

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

Kérdéseim:

  1. próbáltad kikapcsolt JavaScripttel is, hogy úgy sem működik-e?
  2. miért nem jQuery-t használsz, és helyette inkább "inline" JavaScriptet, beledobálva a különböző eseményekhez tartozó attribútumokba a dolgokat?
  3. miért használod az aposztróf HTML-entitását itt? (&#039;)
  4. onclick="this.value=&#039;&#039;;"
    Értem, hogy mi a célod, de miért csinálsz ilyet? Miért nem hagyod, hogy a júzer döntse el, hogy a korábbi értéket felül akarja-e bírálni, vagy sem? Halál idegesítőek az ilyen dolgok felhasználóként.
  5. onfocus="this.select()"
    Lásd előző kérdés.
  6. onblur="this.value=!this.value?&#039;Keresés...&#039;:this.value;"
    Ez teljes mértékben helytelen. Már eleve a this.value=!this.value.
  7. Hogyan csinálod mindezt a módosítást?
    Feltételezem, nem valami tisztességes hook_form_alter()-ben vagy hasonlóban... :)
  8. "de nem tudom, hogy tudok ilyen id-t dinamikusan generálni"
    Miért akarsz ilyen id-t generálni? Miért bírálod felül a Drupal működését?
0
0
aboros képe

drupalban nem bánhatsz így a formokkal, nem így működik a form api. különböző okokból, pl biztonság. nem babrálhatsz így meg űrlapelemeket és nem így kötsz js kódok az űrlapelemekhez. ez így soha nem fog működni, felecsdel.

1
0

-
clear: both;

Sk8erPeter képe

gondolom a kérdezőnek ment, csak kiegészítettél :)
amúgy ja, minden szó igaz :D

0
0
aboros képe

http://drupal.org/project/jform_label
ezt most így hirtelen csak, aztán biztos van még 5-6 hasonló.
szerk: http://drupal.org/project/compact_forms ezt már használtam is talán..

0
0

-
clear: both;

pante képe

Akkor azt szeretném kérdezni, hogy hol találom a search modul html kódját, amibe bele tudnék nyúlni kézzel, mert állítani akarok pár paramétert (nem tetszik a helyzete és az elhelyezkedése) ?

Nyilván ez a megoldás marad, ha nem tudok hash-t kérni a kereső formtól, enélkül viszont nem fut, amit írtam.

0
0
pante képe

Átírtam a kereső html kódját és egy külső search.php-ba vezettem át a feldolgozást. Érdekes, hogy így sem jó, pedig ha egy saját html-ből hívom a feldolgozót, tökéletesen működik!

  1. <div id="block-search-form" class="block block-search">
  2. <form name="urlap" action="search.php" method="POST" id="search-block-form"
  3. accept-charset="UTF-8">
  4. <div>
  5. <div class="container-inline">
  6. <div class="form-item form-type-textfield form-item-search-block-form">
  7. <input name="mezo" onclick="this.value=&#039;&#039;;" onfocus="this.select()"
  8. onblur="this.value=!this.value?&#039;Keresés...&#039;:this.value;" type="text"
  9. id="edit-search-block-form--2" value="Keresés..." size="12" maxlength="128"
  10. class="form-text" />
  11. </div>
  12. <div class="form-actions form-wrapper" id="edit-actions">
  13. <input type="submit" id="edit-submit" value="Keresés" class="form-submit"
  14. />
  15. </div>
  16. <input type="hidden" />
  17. <input type="hidden" name="mezo" />
  18. </div>
  19. </div>
  20. </form>
  21. </div>

Search.php tartalma:

  1. <?php
  2. $link = "http://domain.hu/?q=search/node/".$_POST["mezo"];
  3. header("Location: $link") ;
  4. ?>

100%, hogy jó és működik, csak a D7-ből nem akar valami miért.

0
0
nevergone képe

…hogy HTML és PHP-s fejjel gondolkozol, nem pedig Drupalosan. Ez így nem fog menni, a Drupal egy komplett rendszer, meg vannak a szabályok, ahogy eléred és módosíthatod a működését, de az semmiképpen sem az az út lesz, amit erőltetsz.
Drupal modulfejlesztés témakörében keress könyveket és példákat.

1
0
Sk8erPeter képe

Ez nagyon nem jó ebben a formában, egy külső, saját PHP-s fájlt nem csaphatsz csak úgy hozzá a Drupalhoz, mert vagy iszonyatosan csúnya "megoldáshoz" fog vezetni, vagy egyszerűen nem működik. Mint az esetek többségében, most is az utóbbi eset áll fenn.

Így tudod felülbírálni a search formot:

modulból:

  1. /**
  2.  * Implements hook_form_FORM_ID_alter()
  3.  */
  4. function TEMODULODNEVE_form_search_block_form_alter(&$form, &$form_state, $form_id) {
  5. // ha fent van a Devel modul, kiírathatod a $form tömböt az alábbival:
  6. // dsm($form, '$form in ' . __FUNCTION__ . '()');
  7. }

Mivel referencia szerint kapja meg ez a függvény a változókat, ezért az ezen a tömbön végzett változtatások érvényesek maradnak a függvényből való visszatérés után is.

theme-ből:

  1. modules/search/search-block-form.tpl.php átmásolása a saját theme-ed templates könyvtárába
  2. felülbírálás
  3. cache-törlés

A JavaScriptes dolgok meg attól még csúnyák, és amúgy sem valószínű, hogy pl. az onblur="this.value=!this.value? ......." jó lenne (lásd =! a != helyett).

Egy HTML5-ös dolog egyébként a placeholder attribútum használata:
http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_input_placeho...
mondjuk ennek használatához legyen HTML5-ös a sminked is.

0
0
aboros képe

ez így nem fog menni, találhatsz példákat meg van remek dokumentáció is róla, hogyan használunk javascriptet és jqueryt. http://drupal.org/node/751744

0
0

-
clear: both;