Промяна на формата на урока в Drupal 7

Не е необичайно елементите от тази форма да се появяват/изчезват/променят в зависимост от щракването на елемент върху формуляра. И ако за обикновени полета това може да се направи с модула условни полета, то за вашите формуляри ще трябва да напишете всичко сами. В Drupal това може да стане чрез ajax (можете да прочетете за това по-подробно тук) или чрез параметъра #states в API за формуляри. И сега ще говорим за втория вариант.

така, #states. Всъщност това е PHP обвивка за най-простите функции. jQuery, които променят състоянието на формата при извършване на предварително определени действия с нея.

Състояние на артикула #states е асоциативен масив като този:

Състои се от набор от състояния на елементи, които могат да се променят за определени състояния на други елементи на страницата (селектори могат да бъдат посочени за елементи извън формата!). Най-простият пример:

За тези, които обичат да знаят как работи всичко

При добавяне на атрибут към формуляр #states Drupal свързва библиотеката от ядрото drupal.states (misc/States.js) и също така добавя настройки към страницата за последваща обработка на елементи. За примера по-горе в кода на страницата можете да намерите следния ред:

Следваща библиотека drupal.states взема тези настройки и задава събития jQuery за избрани селектори.

Възможни стойности на състоянието

Списък на състоянията, които могат да бъдат приложени към елемент:

  • активиран - елементът ще бъде достъпен за промени през браузъра.
  • хора с увреждания - елементът няма да бъде достъпен за редактиране.
  • задължително - артикулът ще стане задължителен.
  • по избор - елементът ще стане незадължителен.
  • видими - елемент ще бъде показан.
  • невидим - елементът ще бъде скрит.
  • проверено - артикулът ще бъде проверен (щракнат).
  • неотметнато - елементът е отметнат.
  • разширен - елементът ще бъде разширен (за набори от полета).
  • рухна - елементът ще бъде свит (за набори от полета).

Списък на условните състояния, в които елементът ще промени състоянието си:

  • празен - елементът е празен.
  • запълнени - елементът не е празен.
  • проверено - натиснат елемент.
  • неотметнато - елементът не е натиснат.
  • разширен - елементът се разширява.
  • рухна - елементът е свит.
  • стойност - елемент има стойност.

Списък на състоянията, които могат да бъдат приложени както към елемент, така и като условно състояние:

  • от значение
  • неуместен
  • валиден
  • невалиден
  • докоснат
  • недокоснат
  • чети пиши
  • Само за четене

Тези, които са запознати jQuery лесно да разберат значението на изброените състояния. Струва си да се отбележи, че тези атрибути не са изпълнени изцяло, така че работата с тях в някои случаи може да не даде никакви резултати.

Разликата между превключването на състоянието на формата чрез #states от работа през ajax основно - в първия случай целият формуляр първоначално се зарежда на страницата, но някои от неговите елементи се показват само при определени условия. Докато сте на работа ajax когато страницата се зарежда, формулярът не съдържа ненужни елементи, те се зареждат динамично, като се прави заявка ajax и се получава отговор от сървъра.

Според мен, освен ако не е абсолютно необходимо, използвайте ajax не си заслужава. Не дръпнете сървъра още веднъж, за да заредите няколко елемента на формуляра, ако по някаква причина това не е абсолютно необходимо.

Чудесен пример за работа с #states можете да разгледате тук. Източниците за примера са разположени тук.

Малка послепис.

Колкото по-нататък се развива Drupal, толкова по-широки стават границите му. Забелязах за себе си, че напоследък използвам js все по-рядко в разработка, защото Drupal ви позволява да извършвате повечето от вашите действия чрез PHP обвивки. Самият той включва необходимите js файлове и предава селектори на параметрите на страницата, които самият той след това правилно обработва. Щастлив съм:)