Přeskočit přímo na text


Nepříjemný bug v modulu search - formuláře ve výsledcích hledání nefungují

Dnes jsem skoro hodinu zápasil s tím, že mi nefungovali formuláře zobrazené ve výsledcích hledání – konkrétně formulář „Přidat do košíku“ generovaný Übercartem. Po půl hodině, kdy jsem se snažil tento problém vyřešit sám, jsem to vzdal a začal googlit… A příčina je (alespoň pro mě) poměrně překvapivá.

Neočekávané chování způsobuje modul search a je to víceméně bug. Překvapivé také je, že se to „odhalilo“ poměrně nedávno, cca před dvěma měsíci … (viz Search conflicts with other forms, 20. června 2009 )

Kromě výše zmíněného vlákna se to řešilo i v rámci Übercartu: Search result as teaser ‚Add to cart‘ button doesn´t work

Pokud nutně formuláře ve výsledcích potřebujete, je nutné modul search patchnout – samozřejmě jen do té doby, než se patch dostane do oficiálního vydání Drupalu. Jelikož to není bezpečnostní chyba a moc lidí to zatím netrápí, může to klidně trvat i několik měsíců… (dva už jsou za námi …)

Patch je poměrně jednoduchý:

<?php /*
* Soubor modules/search/se­arch.pages.inc
*/

// před úpravou if (!isset($_POS­T[‚form_id‘])) {

// po úpravě if (!isset($_POS­T[‚keys‘])) {
… ?>

Chyba spočívá víceméně v tom, že funkce která vykresluje formulář a výsledky a hledání, „reaguje“ na jakýkoliv odeslaný formulář na této stránce [1]. Odeslání takovéhoto formuláře skončí tak, jako by se odeslal prázdný formulář Search.

[1] Tzn s atributem action obsahujícím URL, kterou obsluhuje search modul (typicky „/search/node/*“)

IMHO je tato „chyba“ v Drupalu zavlečená ještě z „dřevních dob“ Drupalů 4.6, 4.5 … verze 3 (?), kdy ještě neexistovalo robustní Forms API a s $_POST se v modulech operovalo celkem běžně. Některé části Drupalu jsou pěkně staré (např. DB API) a občas je to znát …

About the authornení
 

Poslat nový komentář

  • You can use Texy! to format and alter entered content.
  • Povolené HTML značky: <em> <strong> <b> <i> <br> <code> <ul> <ol> <li> <pre> <pre class="php">
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

Více informací o možnostech formátování

Hledat

Přihlášení

Bezpečnost Drupalu

Z hlediska bezpečnosti je Drupal na velmi vysoké úrovni, díky propracovanému systému hlášení, prověřování a řešení možných problémů.

Čtěte více a odebírejte bezpečnostní aktuality

Poslední komentáře

Kdo je online

Momentálně je online 0 uživatelů a 1 host.

Support

Psychologie - poradenství