PageRenderTime 24ms CodeModel.GetById 20ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

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