فصل 35. Zend_View

قائمة المحتويات

35.1. مقدمة
35.1.1. كود الـ Controller
35.1.2. كود الـ View
35.2. جزء الـ Controller
35.2.1. إنشاء متغيرات و إعطائها قيم
35.2.2. معالجة(تصيير) جزء الـ View
35.2.3. مسارات أجزاء الـ View
35.3. جزء الـ View
35.3.1. تجاهل "escaping" المخرجات
35.3.2. أنظمة القوالب
35.4. مساعدات الـ View
35.4.1. المساعدات الأساسية
35.4.2. مسارات المساعدات
35.4.3. كتابة مساعداتك الخاصة

35.1. مقدمة

Zend_View عبارة عن class للعمل مع جزء الـ "view" الخاص بالنمط model-view-controller , أى أنه يتواجد ليفصل عملية العرض "view" عن كل من جزء الـ model و جزء الـ controller , حيث يوفر نظام من المساعدات "helpers" و فلاتر للخرج "output filters" و وسائل لتجاهل قيم المتغيرات.

Zend_View عبارة عن نظام قوالب (مجهول) ; يمكنك أن تستخدم لغة PHP نفسها كنظام قوالب, أو يمكنك إنشاء نسخة "instance" من أى نظام قوالب و دمجه مع أكواد جزء الـ view خاصتك.

فى الأساس, إستخدام Zend_View يحدث فى خطوتان هامتان : 1. الـ controller خاصتك يقوم بإنشاء نسخة من Zend_View و يقوم بتمرير متغيرات إلى هذه النسخة . 2. الـ controller يأمر Zend_View بأن يقوم بمعالجة view محدد, بذلك يتم نقل التحكم إلى أكواد الـ view التى تقوم بإنتاج خرج الـ view.

35.1.1. كود الـ Controller

كمثال بسيط, دعونا نفترض أن الـ controller خاصتك لديه قائمة ببيانات كتب و التى نريد أن يتم عرضها (عمل render "تصيير" لها) من خلال view , جزء الـ controller من الممكن أن يكون بهذا الشكل :

<?php
// use a model to get the data for book authors and titles.
$data = array(
    array(
        'author' => 'Hernando de Soto',
        'title' => 'The Mystery of Capitalism'
    ),
    array(
        'author' => 'Henry Hazlitt',
        'title' => 'Economics in One Lesson'
    ),
    array(
        'author' => 'Milton Friedman',
        'title' => 'Free to Choose'
    )
);

// now assign the book data to a Zend_View instance
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;

// and render a view script called "booklist.php"
echo $view->render('booklist.php');
?>
        

35.1.2. كود الـ View

الأن نحن نحتاج كود الـ view المرافق لـ "booklist.php", و هو عبارة عن كود PHP عادى مع وجود إختلاف واحد: أنه يتم تنفيذه داخل مدى "scope" نسخة الـ Zend_View , و الذى يعنى أن المتغير this$ فى هذا الكود سيشير إلى الـ properties و الـ methods الخاصة بهذه النسخة من Zend_View . (المتغيرات التى سيتم تمريرها إلى هذه النسخة من خلال الـ controller ستكون عبارة عن public properties تابعة لنسخة الـ Zend_View ) , إذاً كود view بسيط من الممكن أن يكون مثل هذا :

<?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; ?>
        

لاحظ كيف نستخدم الـ method المسمى "()escape" لنقوم بعمل تجاهل لقيم المتغيرات.