Zend_View-Scripts.xml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <sect1 id="zend.view.scripts">
  2. <title>جزء الـ View</title>
  3. <para>
  4. بمجرد إنتهاء الـ controller خاصتك من عملية نَسب المتغيرات إلى نسخة
  5. Zend_View
  6. و إستدعاء ()render , يقوم Zend_View بجلب محتويات ملف الـ view و ينفذها
  7. داخل
  8. المدى "scope" الخاص بنسخة الـ Zend_View , لذلك داخل أكواد الـ view خاصتك
  9. تكون this$ تشير إلى نسخة الـ Zend_View نفسها .
  10. </para>
  11. <para>
  12. المتغيرات التى تم نسبها إلى الـ view من قبل الـ controller يتم الإشارة إليها
  13. على انها instance properties
  14. (أى properties تنتمى للنسخة فقط) , على سبيل المثال : إن قام الـ
  15. controller بنسب متغير بأسم
  16. 'something' , يمكنك الأشار إليه داخل كود الـ view كـ this->something$ ,
  17. (هذا يسمح لك بمعرفة أى المتغيرات تم نسبها إلى النسخة و أى المتغيرات داخلية
  18. فى كود الـ view نفسه).
  19. </para>
  20. <para>
  21. لنتذكر من جديد, ها هو مثال كود الـ view من فصل "مقدمة الـ Zend_view" .
  22. </para>
  23. <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
  24. <!-- A table of some books. -->
  25. <table>
  26. <tr>
  27. <th>Author</th>
  28. <th>Title</th>
  29. </tr>
  30. <?php foreach ($this->books as $key => $val): ?>
  31. <tr>
  32. <td><?php echo $this->escape($val['author']) ?></td>
  33. <td><?php echo $this->escape($val['title']) ?></td>
  34. </tr>
  35. <?php endforeach; ?>
  36. </table>
  37. <?php else: ?>
  38. <p>There are no books to display.</p>
  39. <?php endif; ?>]]>
  40. </programlisting>
  41. <sect2 id="zend.view.scripts.escaping">
  42. <title>تجاهل "escaping" المخرجات</title>
  43. <para>
  44. واحدة من أهم المهام التى يجب تنفيذها فى كود الـ view هى أن تتأكد من أن
  45. المخرجات قد تم
  46. عمل تجاهل لها أو escaping دائماً , و هذا أهم من أشياء كثيرة أخرى , هذا
  47. يساعد فى تجنب
  48. هجمات الـ cross-site scripting , فإن لم تكن تستخدم دالة أو method أو مساعد
  49. "helper"
  50. يقوم بعملية التجاهل "escaping" بنفسه , فيجب عليك أنت أن تقوم بعمل تجاهل
  51. لمحتويات متغيراتك
  52. قبل إخراجهم دائماً .
  53. </para>
  54. <para>
  55. Zend_View يأتى مع method يسمى ()escape و هو الذى يقوم لك بعملية التجاهل
  56. للمخرجات.
  57. </para>
  58. <programlisting role="php"><![CDATA[<?php
  59. // bad view-script practice:
  60. echo $this->variable;
  61. // good view-script practice:
  62. echo $this->escape($this->variable);
  63. ?>]]>
  64. </programlisting>
  65. <para>
  66. الأعدادات الأساسية للـ method المسمى ()escape هى أن يعتمد على دالة لغة PHP
  67. المسمى
  68. ()htmlspecialchars لعمل تجاهل , لكن إعتماداً على بيئة عمل تطبيقك , ربما تود أن تتم
  69. عملية
  70. التجاهل للمخرجات بطريقة أخرى , إستخدم الـ method المسمى ()setEscape و أنت فى
  71. مستوى
  72. الـ controller لتخبر Zend_View عن ما الذى يجب إستدعائه (callback) عند
  73. تنفيذ عملية
  74. تجاهل المخرجات.
  75. </para>
  76. <programlisting role="php"><![CDATA[<?php
  77. // create a Zend_View instance
  78. $view = new Zend_View();
  79. // tell it to use htmlentities as the escaping callback
  80. $view->setEscape('htmlentities');
  81. // or tell it to use a static class method as the callback
  82. $view->setEscape(array('SomeClass', 'methodName'));
  83. // or even an instance method
  84. $obj = new SomeClass();
  85. $view->setEscape(array($obj, 'methodName'));
  86. // and then render your view
  87. echo $view->render(...);
  88. ?>]]>
  89. </programlisting>
  90. <para>
  91. الدالة أو الـ method الذى سيتم عمل callback له يجب أن يستلم القيمة التى
  92. سيقوم بتجاهلها
  93. فى البراميتر الأول , و كل البراميترات الأخرى يجب أن تكون أختيارية.
  94. </para>
  95. </sect2>
  96. <sect2 id="zend.view.scripts.templates">
  97. <title>أنظمة القوالب</title>
  98. <para>
  99. أيضاً لغة PHP نفسها عبارة عن نظام قوالب قوى, لكن بعض المطورين يرى
  100. أنها قوية جدا أو معقدة بالنسبة إلى المصممين الذين سيستخدمون القوالب.
  101. لذلك , كود الـ view من الممكن إستخدامه لإنشاء نسخ أو معالجة
  102. كائنات قوالب منفصلة , مثل قوالب PHPLIB-style , كود الـ view
  103. لهذا النوع من النشاطات من الممكن أن بيدو مثل هذا :
  104. </para>
  105. <programlisting role="php"><![CDATA[<?php
  106. include_once 'template.inc';
  107. $tpl = new Template();
  108. if ($this->books) {
  109. $tpl->setFile(array(
  110. "booklist" => "booklist.tpl",
  111. "eachbook" => "eachbook.tpl",
  112. ));
  113. foreach ($this->books as $key => $val) {
  114. $tpl->set_var('author', $this->escape($val['author']);
  115. $tpl->set_var('title', $this->escape($val['title']);
  116. $tpl->parse("books", "eachbook", true);
  117. }
  118. $tpl->pparse("output", "booklist");
  119. } else {
  120. $tpl->setFile("nobooks", "nobooks.tpl")
  121. $tpl->pparse("output", "nobooks");
  122. }
  123. ?>]]>
  124. </programlisting>
  125. <para>
  126. و هذه هى الملفات الأخرى ذات الصلة المفروض وجودها :
  127. </para>
  128. <programlisting role="html"><![CDATA[
  129. <!-- booklist.tpl -->
  130. <table>
  131. <tr>
  132. <th>Author</th>
  133. <th>Title</th>
  134. </tr>
  135. {books}
  136. </table>
  137. <!-- eachbook.tpl -->
  138. <tr>
  139. <td>{author}</td>
  140. <td>{title}</td>
  141. </tr>
  142. <!-- nobooks.tpl -->
  143. <p>There are no books to display.</p>
  144. ]]>
  145. </programlisting>
  146. </sect2>
  147. </sect1>
  148. <!-- vim:se ts=4 sw=4 et: -->