Zend Framework цела тэга View Helper

Па Стывен Лойд Уоткин , у суботу 21 Жніўня 2010 11:13 вечара
Photo from  http://www.flickr.com/photos/daniello/

Фота з http://www.flickr.com/photos/daniello/

Рэзюмэ

Тут я абмяркоўваю стварэнне View Helper для змены HTML тэгаў, і, больш канкрэтна цела тэгаў. Створаны View Helper дазваляе функцыянальнасць, аналагічную галаву * / InlineScript памочнікаў ўжо ў стандартнай Zend Framework памочнікаў гледжання, але дазваляе праграмнай мадыфікацыі атрыбутаў тэга. Вызначана праверыць дэма-старонкі і код на GitHub.

Матывацыя

Стандартных памочнікаў Zend Framework гледжання вялікі набор інструментаў для рацыяналізацыі паўсядзённых задач, прагляду і ўліку змены / дадання скрыптоў і загалоўка блока (як правіла, якая адбылася ў макеце) знутры прагляд без ужывання выродлівыя хакі (г.зн. галава * / InlineScript памочнікаў).

З нагоды я выявіў, неабходна ўнесці змены ў <body> тэгі, напрыклад, уключыўшы пад нагрузкай , клас або атрыбут стылю і г.д. Я таксама павінны быць у стане выканаць гэта з іншых памочнікаў гледжання. Вазьміце гэта наступным надуманы прыклад ...

На сайце X, некаторыя старонкі ўтрымліваюць стандартныя додзе формы. Гэтыя додзе формы праводзіцца ў рамках памочнікаў для выгоды. Наогул было вырашана не ўключаць у додзе CSS класаў у целе тэга і толькі дадаць іх у выпадку неабходнасці. Там, можа быць некалькі памочнікаў на старонкі, якія неабходна дадаваць свае ўласныя атрыбуты цела тэга. (Я сказаў, што гэта надуманы)

Код можна знайсці ў маёй ЖКТ сховішча @ GitHub і дэманстрацыйнай старонкі .

Як гэта працуе?

Пры стварэнні гледжання цела тэгі дапаможныя неўзабаве я зразумеў, што вялікая частка кода не было канкрэтных на тое, што я быў развіваюцца таму я выцягнуў агульную функцыянальнасць у абстрактны клас. Па бетанавання абстрактнага класа можна змяніць любыя тэгі гэтак жа, як цела тэга абмяркоўваецца тут зрабіць код больш versitile.

Пад капотам (калі можна так сказаць) код заснаваны на што з * галаву і InlineScript памочнікаў гледжання. Ён выкарыстоўвае Zend_View_Helper_Placeholder_Container_Standalone захоўваць атрыбуты і іх значэння, пакуль яны не патрабуюцца. Сам кантэйнер выкарыстоўвае Zend_Registry для захоўвання значэньняў пад ключ, вызначаны ў класе (калі вы паглядзіце на юніт-тэстаў ачысціць рэестр пасля кожнага тэсту).

Код будзе ўпісвацца ў добра " Голы Zend_Layout і Zend_View "код, які я напісаў пра пару тыдняў таму, альбо як частка стандартнага Zend Framework MVC ўстаноўкі.

Выкарыстаньне

Клас павінен быць вельмі просты ў выкарыстанні. Па-першае дзвюх пазіцый патрабуецца ў макеце сцэнар наступным чынам:

  <? PHP Рэха $ гэтым-> BodyTag ()?>
 <? PHP Рэха $ гэтым-> BodyTag () -> ToString (Pro_View_Helper_AbstractTag:: CLOSE)?> 

Заўвага: Вам трэба змяніць імя класа вы павінны рухацца View Helper ў сваю ўласную бібліятэку. Відавочна, што пастаянная даступная праз рэалізацыю (BodyTag), а таксама праз абстрактнага класа.

Прыклад ўнясення змяненняў у вашым целе тэга з дапамогай прадстаўлення памочнік рэха <body myclass" class="nihilo style="text-align-left; width: 80em"> з'яўляецца:

  <? PHP
 $ Гэтым-> BodyTag ("Клас", "з нічога")
     -> BodyTag ("стыль", "выраўноўвання тэксту: левая бок)
     -> BodyTag ("стыль", "шырыня: 80em, ілжывыя, ';')
     -> BodyTag ('Клас', 'MyClass')
 ?> 

Гэта можа быць зроблена па ўсім прагляду файла, у некалькіх памочнікаў гледжання, і ў файл макета (пры ўмове яе да цела тэга запісваецца). Атрыбуты могуць быць выдаленыя / перазапісу значэнняў у той час могуць быць дададзеныя і прыкладаецца (сепаратара можа быць перададзены). Калі ж значэнне атрыбуту перадаецца некалькі раз толькі адну копію запісваецца з атрыбутам.

Для поўнага дэма-небудзь відэлец GitHub сховішча і запусціць demo.php файл ва ўласным браўзэры, ці ж наведаць гэтую старонку , каб убачыць яго ў дзеянні. Выкарыстаньне demo.php сцэнар мяркуе, што вы Zend Autoloader (ці аналагічны) ужо наладзілі.

Стварэнне ўласнага дапаможныя тэгаў

Каб рэалізаваць уласны дапаможны выгляд проста пашырыць абстрактны клас тэгі і замяніць наступнымі ўласцівасцямі класа:

  • $ _regKey: Унікальны ключ для тэга (выкарыстоўваецца для Zend_Registry)
  • $ _validAttributes: Масіў сапраўдных імёнаў атрыбутаў, павінны быць у ніжнім рэгістры ў адпаведнасці з W3C
  • $ _selfClosing: Лагічнае значэнне, каб паказаць, калі тэг самозакрывания ці не, напрыклад, <br/>
  • $ _tagName: Назва тэга (г.зн. цела ў дадзеным прыкладзе)

Так, у канцы канцоў код для BodyTag View Helper сам, яго вельмі кампактным:

 / ** * Прагляд памочнікам для цела тэга * * @ аўтар Лойд Уоткин * @ з 2010/08/21 * @ пакет Pro * @ * подпакет ViewHelper / клас Pro_View_Helper_BodyTag пашырае Pro_View_Helper_AbstractTag {/ ** * ключ рэестра для запаўняльніка * * @ VAR * радкі / ахоўных $ _regKey = 'Pro_View_Helper_BodyTag'; / ** * Якія атрыбуты сапраўдныя * * У цяперашні час толькі СТП атрыбуты, якія падтрымліваюцца * (S = строгі, T = ПЕРАХОДНЫЯ, F = FRAMESET) * * @ гл. http://www .w3schools.com/tags/tag_body.asp * @ VAR масіва * / $ ахоўных _validAttributes = Array (/ * стандартныя атрыбуты * 'реж' / 'класа', 'ID', 'Lang "," стыль "," назву ',' XML : Lang ', / * Падзея атрыбуты * / "OnClick", "ondblclick', 'пад нагрузкай', 'OnMouseDown', 'OnMouseMove', 'onmouseout", "onmouseover", "OnMouseUp', 'OnKeyDown, "OnKeyPress ',' OnKeyUp ',' OnUnload ',); / ** * Self зачыняе тэга?  * * * @ VAR булева / ахоўных $ _selfClosing = False; / ** * Імя тэга * * @ VAR радку * / $ ахоўных _tagName = 'цела';} 

Калі вы паглядзіце на рэпазітары ёсць таксама групы юніт-тэстаў, якія цалкам пакрываюць функцыянальнасць. Юніт-тэсты напісаныя ў PHPUnit і ў BodyTagTest.php файл.

І нарэшце ...

Тут я паказаў вам, мае ажыццяўлення абстрактнага тэгі Анатацыя памочнік віду (EEK) і яго цела тэгі рэалізацыі. Хоць JavaScript функцыянальнасць можа быць рэалізавана іншымі спосабамі (акрамя жорсткага кадавання на выхадзе час) іншых рэчаў не можа (без JavaScript, што ёсць) без змянення іншых частак дадатку. Спадзяюся, вы знойдзеце карысныя класаў у дадатку ...

3 Адказы на "Zend Framework цела тэга View Helper"

  1. Мой Automagic кампаноўнік выклікаў на выдачу дазволаў на код для XML таму, калі ласка, ігнараваць гэтае пытанне:)

  2. [...] Арыгінальны тут: Evilprofessor.co.uk »Zend Framework цела тэга View Helper не [...]

  3. [...] Больш ад першапачатковага крыніцы: Evilprofessor.co.uk »Zend Framework цела тэга View Helper Доля і [...]

Напісаць адказ













Панарама Тэма Themocracy

5 наведвальнікаў онлайн
5 гасцей, 0-ботаў, 0 карыстальнікаў
Макс наведвальнікаў сёння: 13 у 12:19 раніцы UTC
У гэтым месяцы: 26 у 2011/05/07 12:35 раніцы UTC
У гэтым годзе: 130 у 2011/03/28 10:40 вечара UTC
За ўвесь час: 130 у 2011/03/28 10:40 вечара UTC