/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
- <sect1 id="zend.view.scripts">
- <title>جزء الـ View</title>
- <para>
- بمجرد إنتهاء الـ controller خاصتك من عملية نَسب المتغيرات إلى نسخة Zend_View
- و إستدعاء ()render , يقوم Zend_View بجلب محتويات ملف الـ view و ينفذها داخل
- المدى "scope" الخاص بنسخة الـ Zend_View , لذلك داخل أكواد الـ view خاصتك
- تكون this$ تشير إلى نسخة الـ Zend_View نفسها .
- </para>
- <para>
- المتغيرات التى تم نسبها إلى الـ view من قبل الـ controller يتم الإشارة إليها على انها instance properties
- (أى properties تنتمى للنسخة فقط) , على سبيل المثال : إن قام الـ controller بنسب متغير بأسم
- 'something' , يمكنك الأشار إليه داخل كود الـ view كـ this->something$ ,
- (هذا يسمح لك بمعرفة أى المتغيرات تم نسبها إلى النسخة و أى المتغيرات داخلية فى كود الـ view نفسه).
- </para>
- <para>
- لنتذكر من جديد, ها هو مثال كود الـ view من فصل "مقدمة الـ Zend_view" .
- </para>
- <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
- <!-- A table of some books. -->
- <table>
- <tr>
- <th>Author</th>
- <th>Title</th>
- </tr>
- <?php foreach ($this->books as $key => $val): ?>
- <tr>
- <td><?php echo $this->escape($val['author']) ?></td>
- <td><?php echo $this->escape($val['title']) ?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- <?php else: ?>
- <p>There are no books to display.</p>
- <?php endif; ?>]]>
- </programlisting>
- <sect2 id="zend.view.scripts.escaping">
- <title>تجاهل "escaping" المخرجات</title>
- <para>
- واحدة من أهم المهام التى يجب تنفيذها فى كود الـ view هى أن تتأكد من أن المخرجات قد تم
- عمل تجاهل لها أو escaping دائماً , و هذا أهم من أشياء كثيرة أخرى , هذا يساعد فى تجنب
- هجمات الـ cross-site scripting , فإن لم تكن تستخدم دالة أو method أو مساعد "helper"
- يقوم بعملية التجاهل "escaping" بنفسه , فيجب عليك أنت أن تقوم بعمل تجاهل لمحتويات متغيراتك
- قبل إخراجهم دائماً .
- </para>
- <para>
- Zend_View يأتى مع method يسمى ()escape و هو الذى يقوم لك بعملية التجاهل للمخرجات.
- </para>
- <programlisting role="php"><![CDATA[<?php
- // bad view-script practice:
- echo $this->variable;
- // good view-script practice:
- echo $this->escape($this->variable);
- ?>]]>
- </programlisting>
- <para>
- الأعدادات الأساسية للـ method المسمى ()escape هى أن يعتمد على دالة لغة PHP المسمى
- ()htmlspecialchars لعمل تجاهل , لكن إعتماداً على بيئة عمل تطبيقك , ربما تود أن تتم عملية
- التجاهل للمخرجات بطريقة أخرى , إستخدم الـ method المسمى ()setEscape و أنت فى مستوى
- الـ controller لتخبر Zend_View عن ما الذى يجب إستدعائه (callback) عند تنفيذ عملية
- تجاهل المخرجات.
- </para>
- <programlisting role="php"><![CDATA[<?php
- // create a Zend_View instance
- $view = new Zend_View();
- // tell it to use htmlentities as the escaping callback
- $view->setEscape('htmlentities');
- // or tell it to use a static class method as the callback
- $view->setEscape(array('SomeClass', 'methodName'));
- // or even an instance method
- $obj = new SomeClass();
- $view->setEscape(array($obj, 'methodName'));
- // and then render your view
- echo $view->render(...);
- ?>]]>
- </programlisting>
- <para>
- الدالة أو الـ method الذى سيتم عمل callback له يجب أن يستلم القيمة التى سيقوم بتجاهلها
- فى البراميتر الأول , و كل البراميترات الأخرى يجب أن تكون أختيارية.
- </para>
- </sect2>
- <sect2 id="zend.view.scripts.templates">
- <title>أنظمة القوالب</title>
- <para>
- أيضاً لغة PHP نفسها عبارة عن نظام قوالب قوى, لكن بعض المطورين يرى
- أنها قوية جدا أو معقدة بالنسبة إلى المصممين الذين سيستخدمون القوالب.
- لذلك , كود الـ view من الممكن إستخدامه لإنشاء نسخ أو معالجة
- كائنات قوالب منفصلة , مثل قوالب PHPLIB-style , كود الـ view
- لهذا النوع من النشاطات من الممكن أن بيدو مثل هذا :
- </para>
- <programlisting role="php"><![CDATA[<?php
- include_once 'template.inc';
- $tpl = new Template();
- if ($this->books) {
- $tpl->setFile(array(
- "booklist" => "booklist.tpl",
- "eachbook" => "eachbook.tpl",
- ));
- foreach ($this->books as $key => $val) {
- $tpl->set_var('author', $this->escape($val['author']);
- $tpl->set_var('title', $this->escape($val['title']);
- $tpl->parse("books", "eachbook", true);
- }
- $tpl->pparse("output", "booklist");
- } else {
- $tpl->setFile("nobooks", "nobooks.tpl")
- $tpl->pparse("output", "nobooks");
- }
- ?>]]>
- </programlisting>
- <para>
- و هذه هى الملفات الأخرى ذات الصلة المفروض وجودها :
- </para>
- <programlisting role="html"><![CDATA[
- <!-- booklist.tpl -->
- <table>
- <tr>
- <th>Author</th>
- <th>Title</th>
- </tr>
- {books}
- </table>
- <!-- eachbook.tpl -->
- <tr>
- <td>{author}</td>
- <td>{title}</td>
- </tr>
- <!-- nobooks.tpl -->
- <p>There are no books to display.</p>
- ]]>
- </programlisting>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->