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/search.pages.inc
 */

// před úpravou
if (!isset($_POST['form_id'])) {
  ...

// po úpravě
if (!isset($_POST['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 author

Vojtěch Kusý aka wojtha. Momentálně student doktorského studia na ČVUT, Fakulta stavební, obor Informační systémy ve stavebnictví. Drupalem se zabývá/živí již od verze 4.6, cca od ledna 2006. Poskytuje konzultace, navrhuje řešení, programuje pro drupal moduly „na míru“, ve volných chvílích radí na fóru drupal.cz, pracuje na překladu pro e-shop Übercart a snaží se starat o vlastní modul NodeSymlinks.

 

Poslat nový komentář

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.
  • You can use Texy! to format and alter entered content.
  • Povolené HTML značky: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <p> <br> <b> <i> <h2> <img> <pre> <sup> <sub> <pre class="php"> <span class="php-keyword1"> <span class="php-var"> <span class="php-num"> <img class="screenshot"> <p class="beginner"> <a class="greybox"> <h3> <h4>

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

Hledat

Přihlášení

Poslední komentáře