List tipa lauks un Firefox fīča

j2b Thu, 05/17/2012 - 21:26

Vakar saskāros ar vienu īpatnību/fīču saistībā ar Firefox. Citos pārlūkos tādas lietas nav novērotas.

D7 komentēšanas formā pieliku <code>Term reference</code> lauciņu. Tas pats lauciņš ir arī izmantots pašā nodē, pie kura pievienota komentāra forma tajā pat logā, kur pats dokuments. Pacentīšos panākt <code>Comment Driven</code> risinājumu uz D7 pašrocīgi. Abi lauciņi nav obligāti, un ir ar Taxonomy ierakstītu statusu sarakstu. Attēlojums - Select list.

Izveidoju savu moduli, kas pie nodes atvēršanas, paņem nodē uzstādīto <code>field_status</code> vērtību, un ievieto šo vērtību Komentāra formas lauciņā, kā <code>#default_value</code>.

Ar to problēmu nav, bet ilgi nočakarējos, līdz sapratu, ka problēma tomēr ir, un tā ir "Firefox fīča" (kā viņi to paši norāda). Respektīvi, Firefox kešo formas saturu, lai gadījumā, ja netīšām izdodas pāriet uz citu lapu, atlecot atpakaļ būtu iepriekš attēlotās formas veiktie ieraksti. HTML kods liecina, ka Default value ir definēts pareizi, jo HTML papildināts ir ar select="selected" atribūtu, bet fiziski tas netiek attēlots, un lauciņš rāda <code>- None -</code> vērtību.

Pārbaudīju arī FF uzstādījumus - man viss ir noņemts - nekādas vēstures formu un paroļu saglabāšanā. Taču šī "fīča" turpināja darboties.

Vai kāds ir saskāries ar šādu lietu, un vai zin kādu ieteikumu, jo, ja lapā ir nepieciešams ieviest šādu funkcionalitāti, būtu aplami, ja papildus jākomentē ir lietotāju vajadzība koriģēt FF uzstādījumus?

Tik tālu, cik es tiku ar izpēti, ja Comments formu atver jaunā logā, nevis zem node, tad viss darbojas normāli. Arī Cold-reload (Ctrl+F5/Cmd+Shift+r) page īsti neko nedeva. Apskatīju arī drupal.org/project/issues/xxx, kur arī pie komentāriem ir līdzīga funkcionalitāte, taču tur tādas blaknes uz FF nav, kas nozīmē, ka kaut kas trūkst. Pamata komentāru formu neesmu mainījis, un mans modulis izmanto <code>hook_form_comment_form_alter()</code> funkciju, lai ievietotu <code>#default_value</code>.

Pašlaik problēmu tā kā esmu atrisinājis, bet tas īsti nav tāds (manuprāt) korekts veids. Papildus modulī es pielādēju JS failu, kas palaiž sekojošu kodu:

<code>window.onload = function() { document.forms['comment-form'].reset(); };</code>

Tik tālu viss strādā, un būtība ir resetot formu. Taču te ir atkarība no javascript, un īsti nedomāju, ka drupal.org izmanto ko līdzīgu. Kaut kam jābūt tomēr citādam, bet nevaru atrast kam? Ir arī alternatīvi varianti - metatagos definēt expire, servera līmenī definēt expiration laikus un keša ilgumu, un galu galā hakot HTML kodu, kas nav XHTML valid risinājums. Taču tas viss ir pārāk sarežģīti risinājumi priekš tik vienkāršas problēmas.

Šo eksperimentu veicu uz D7 Bartik tēmas.