Zend Framework Body Tag View Helper

Bởi Steven Lloyd Watkin , Thứ Bảy 21 Tháng 8 2010 23:13
Photo from  http://www.flickr.com/photos/daniello/

Ảnh chụp từ http://www.flickr.com/photos/daniello/

Tóm tắt

Ở đây tôi thảo luận về việc tạo ra một helper xem chỉnh sửa các thẻ HTML, và đặc biệt hơn các thẻ cơ thể. Các trợ giúp xem tạo cho phép chức năng tương tự như các đầu * / người giúp đỡ xem inlineScript đã có trong các tiêu chuẩn Zend Framework người giúp đỡ xem, nhưng cho phép thay đổi chương trình của các thuộc tính tag. Chắc chắn hãy kiểm tra các trang giới thiệu và các đoạn mã trên github.

Động lực

Zend Framework Các tiêu chuẩn người giúp đỡ xem là một tập hợp lớn các công cụ để tinh giản các nhiệm vụ xem trần tục và cho phép sửa đổi / bổ sung các kịch bản và các khối phần đầu (thường được tổ chức trong layout) từ bên trong xem mà không áp dụng hacks xấu xí (tức là * con / inlineScript người giúp đỡ xem).

Khi có dịp tôi đã tìm thấy cần phải sửa đổi để các tag <body>, ví dụ thêm một onload , lớp, hoặc vv thuộc tính phong cách tôi cũng yêu cầu để có thể thực hiện điều này từ bên trong người giúp đỡ xem khác. Lấy ví dụ sau đây contrived ...

Trên X trang web, các trang nhất định bao gồm các tiêu chuẩn đạo đường hình thức. Những hình thức võ đường được tổ chức trong vòng người giúp đỡ xem cho thuận tiện. Nói chung nó đã được quyết định không bao gồm các võ đường CSS các lớp học tại các tag cơ thể và chỉ thêm chúng khi cần thiết. Có một số người giúp đỡ có thể xem trên trang đó cần phải thêm các thuộc tính riêng của họ để các tag cơ thể. (Tôi nói nó đã được contrived)

Mã này có sẵn trong GIT của tôi kho @ github và các trang demo .

Cách thức hoạt động

Khi tạo ra các trợ giúp cơ thể xem tag tôi sớm nhận ra rằng hầu hết các mã đã không cụ thể cho những gì tôi đã phát triển vì vậy tôi đã rút ra khỏi các chức năng phổ biến vào một lớp trừu tượng. Bằng cách đổ bê tông các lớp trừu tượng có thể sửa đổi bất kỳ tag trong cùng một cách như các tag cơ thể thảo luận ở đây làm cho các mã nhiều hơn nữa versitile.

Bên dưới mui xe (có thể nói) mã được dựa trên đó các * đầu và người trợ giúp xem inlineScript. Nó sử dụng Zend_View_Helper_Placeholder_Container_Standalone để lưu trữ các thuộc tính và giá trị của họ cho đến khi họ được yêu cầu. Các thùng chứa chính nó sử dụng Zend_Registry để lưu trữ các giá trị theo quy định tại các lớp học chính (nếu bạn nhìn vào các đơn vị xét nghiệm để xóa các registry xuống sau khi thử nghiệm).

Các mã này sẽ phù hợp tốt với các " Zend_Layout Naked và Zend_View "mã tôi đã viết về một vài tuần trước đây hoặc là một phần của tiêu chuẩn Zend Framework MVC cài đặt.

Cách sử dụng

Các lớp nên được rất đơn giản để sử dụng. Thứ nhất hai mục được yêu cầu trong kịch bản bố trí của bạn như sau:

 <? Php echo $ this-> bodyTag ()> <php echo bodyTag $ this-> () - toString>?? (Pro_View_Helper_AbstractTag:: CLOSE)>? 

Lưu ý: Bạn sẽ cần phải thay đổi tên lớp bạn nên di chuyển các helper xem thư viện của riêng bạn. Rõ ràng là không đổi là có sẵn thông qua việc thực hiện (bodyTag) cũng như thông qua các lớp trừu tượng.

Một ví dụ về việc thay đổi tag cơ thể của bạn bằng cách sử dụng các helper xem để echo myclass" class="nihilo <body style="text-align-left; width: 80em"> là:

  <? Php
 $ This-> bodyTag ("lớp", "nihilo ')
     -> BodyTag ("phong cách", "text-align: left ')
     -> BodyTag ("phong cách", "width: 80em ', false,'; ')
     -> BodyTag ('lớp', 'myclass')
 ?> 

Điều này có thể được thực hiện trong suốt các tập tin xem, ở một số người giúp đỡ xem, và bố trí tập tin (được cung cấp trước khi các tag cơ thể được viết ra nó). Các thuộc tính có thể được gỡ bỏ / giá trị trong khi ghi đè có thể được thêm và nối (phân cách có thể được thông qua). Nếu giá trị thuộc tính tương tự được thông qua nhiều lần chỉ có một bản duy nhất được viết với thuộc tính.

Đối với một bản demo đầy đủ hoặc là ngã ba github kho và chạy tập tin demo.php trong trình duyệt của riêng bạn, hoặc cách khác truy cập vào trang này để xem nó trong hành động. Cách sử dụng của các demo.php kịch bản giả định bạn có tự động load Zend (hoặc tương tự) đã được thiết lập.

Tạo trợ giúp của chính khóa của bạn

Để thực hiện riêng của bạn chỉ đơn giản là xem trợ giúp mở rộng các lớp trừu tượng và ghi đè lên các tag thuộc tính của lớp như sau:

  • $ _regKey: Một chìa khóa duy nhất cho các tag (sử dụng cho Zend_Registry)
  • $ _validAttributes: Một loạt các tên thuộc tính hợp lệ, phải được viết thường để thực hiện theo W3C
  • $ _selfClosing: Boolean giá trị để xác định nếu tag là tự đóng cửa hay không, ví dụ như <br/>
  • $ _tagName: Tên của thẻ (tức là cơ thể trong ví dụ này)

Vì vậy, cuối cùng các mã cho các helper xem bodyTag chính nó, rất nhỏ gọn:

 / ** * Xem trợ giúp cho các tag cơ thể * * @ tác giả Lloyd Watkin * @ kể từ 21/08/2010 * @ * gói Pro @ subpackage ViewHelper * / lớp Pro_View_Helper_BodyTag mở rộng Pro_View_Helper_AbstractTag {/ ** * Registry chính cho giữ chỗ * * @ var chuỗi * / bảo vệ $ _regKey = 'Pro_View_Helper_BodyTag'; / ** * Những thuộc tính có giá trị * * Hiện nay chỉ STF thuộc tính * hỗ trợ (S = nghiêm ngặt, T = CHUYỂN TIẾP, F = FRAMESET) * * @ thấy http://www .w3schools.com/tags/tag_body.asp * @ var array * / bảo vệ $ _validAttributes = array (/ * Tiêu chuẩn thuộc tính * / "lớp", "thư mục ',' id ',' lang ',' phong cách", "Tiêu đề ',' xml : lang ', / * Sự kiện thuộc tính * / "onclick", "ondblclick", "onload", "onmousedown', 'onmousemove', 'onmouseout", "onmouseover", "onmouseup', 'onkeydown', 'onkeypress', 'onkeyup', 'onunload',); / ** * Tự thẻ đóng?  * * @ Var boolean * / bảo vệ $ _selfClosing = false; / ** * Từ khóa Tên * * @ var chuỗi * / bảo vệ $ _tagName = 'cơ thể';} 

Nếu bạn nhìn vào kho còn có một nhóm các xét nghiệm đơn vị có đủ trang trải các chức năng. Các xét nghiệm đơn vị được viết bằng PHPUnit và đang trong BodyTagTest.php file.

Cuối cùng ...

Ở đây tôi đã thể hiện bạn thực hiện của tôi về một người trợ giúp tag xem trừu tượng trừu tượng (eek) và thực hiện các tag cơ thể của nó. Trong khi các chức năng JavaScript có thể được thực hiện theo những cách khác (trừ mã hóa cứng vào thời gian đầu ra) khác những điều không thể (mà không cần JavaScript đó là) mà không thay đổi các phần khác của ứng dụng. Tôi hy vọng bạn tìm thấy những lớp học hữu ích trong ứng dụng của bạn ...

3 hồi đáp tới "Zend Framework trợ giúp cơ thể Xem Tag"

  1. Steven Watkin Lloyd cho biết:

    automagic mối liên kết của tôi đã gây ra vấn đề trong các mã XML xin vui lòng bỏ qua vấn đề này:)

  2. [...] Bản gốc ở đây: Evilprofessor.co.uk »Zend Framework Body Tag View Helper Không [...]

  3. [...] Nhiều hơn từ nguồn gốc: Evilprofessor.co.uk »Zend Framework Body Tag View Helper Chia sẻ và [...]

Để lại một trả lời













Chủ đề của bức tranh toàn cảnh Themocracy

5 khách online
5 khách, 0 chương trình, 0 thành viên
Max khách truy cập hôm nay: 13 lúc 12:19 giờ UTC
Trong tháng này: 26 tại 2011/07/05 12:35 giờ UTC
Trong năm nay: 130 tại 28-03-2011 10:40 UTC
Tất cả thời gian: 130 vào 28-03-2011 10:40 UTC