/documentation/manual/ar/module_specs/Zend_View-Scripts.xml

https://github.com/decaoz/zf1 · XML · 173 lines · 128 code · 38 blank · 7 comment · 0 complexity · c844ed15d20a04db8d687ee28c7c21ad MD5 · raw file

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