ویوها

یک ویو به طور ساده، یک صفحه یا یک فرگمنت (Fragment) یعنی بخشی از صفحه مانند هدر، فوتر، سایدبار و ... است. در واقع درصورتی که نیاز به سلسله مراتب در ویوها داشته باشید، ویوها انعطاف‌پذیری لازم برای جاسازی در سایر ویوها را دارند. ویوها در کدایگنایتر فایل‌هایی برای نمایش محتوا هستند. ویوها هرگز به صورت مستقیم فراخوانی نمی شوند، آنها باید توسط کنترلر لود شوند. فراموش نکنید که در چارچوب MVC مانند پلیس ترافیک عمل می کند و در نتیجه مسئول نمایش یک ویو خاص است. اگر کنترلرها در کدایگنایتر را هنوز نخوانده اید، قبل از خواندن ادامه مطالب این پست، حتما آن را مطالعه کنید. به کنترلر نمونه‌ای که در پست کنترلرها در کدایگنایتر ساختید،  یک ویو اضافه کنید.

ساخت ویو

فایلی با نام blogview.php بسازید و کد زیر را داخل آن بنویسید.

<html>
<head>
        <title>My Blog</title>
</head>
<body>
        <h1>Welcome to my Blog!</h1>
</body>
</html>

سپس این فایل را در دایرکتوری application/views/ directory ذخیره کنید.

لود ویو

برای لود یک فایل ویو خاص، از متد زیر استفاده کنید.

$this->load->view('name');

آرگومنت name، نام فایل ویو است.

توجه: نیازی به نوشتن پسوند فایل‌های ویو نیست، مگر اینکه چیزی غیر از php باشند.

فایل کنترلر را که قبلا با نام Blog.php ساخته‌اید باید ویرایش کنید و برای لود ویو، کد زیر را جایگزین محتوای آن کنید:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $this->load->view('blogview');
        }
}

برای مشاهده سایت با کمک این ویو، به آدرس زیر بروید.

example.com/index.php/blog/

بارگذاری چند ویو

کدایگنایتر به صورت هوشمندانه از چندین بار فراخوانی متد $this->load->view() از داخل یک کنترلر، پشتیبانی میکند. اگر این متد بیش از یکبار فراخوانی شود، محتوای ویوها را به یکدیگر اضافه میکند. مثلا اگر می خواهید از چندین ویو برای نمایش هدر، منو، محتوا و فوتر استفاده کنید اکشن index در کنترلر Page به صورت زیر خواهد بود.

<?php

class Page extends CI_Controller {

        public function index()
        {
                $data['page_title'] = 'Your title';
                $this->load->view('header');
                $this->load->view('menu');
                $this->load->view('content', $data);
                $this->load->view('footer');
        }

}

کاربرد این روش زمانی است که قرار است بخشی از محتوای همه صفحات ثابت باشد، بخش‌هایی مانند هدر، فوتر و سایدبار متداول‌ترین بخش‌هایی هستند که در اکثر قالب‌ ها یکسان هستند.

ذخیره ویوها داخل ساب‌دایرکتوری‌ها

فایل‌های ویو برای سازماندهی و مرتب‌سازی بهتر می‌توانند در ساب‌دایرکتوری‌ها ذخیره شوند. اگر از این روش استفاده کنید، باید نام ساب‌دایرکتوری را نیز در کنار نام فایل‌ها بکار ببرید.

$this->load->view('directory_name/file_name');

ارسال داده به ویو

داده هایی که از کنترلر به ویو ارسال می‌شوند باید به صورت آرایه یا آبجکت باشند و به عنوان پارامتر دوم متد view استفاده شوند. برای مثال، ارسال آرایه از کنترلر به ویو به صورت زیر:

$data = array(
        'title' => 'My Title',
        'heading' => 'My Heading',
        'message' => 'My Message'
);

$this->load->view('blogview', $data);

و ارسال آبجکت به ویو به صورت زیر است:

$data = new Someclass();
$this->load->view('blogview', $data);
نکته: اگر از یک آبجکت استفاده کنید، پراپرتی‌های کلاس تبدیل به عناصر آرایه خواهند شد.

فایل کنترلر خود را باز کنید و محتوای زیر را در آن قرار دهید.

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $data['title'] = "My Real Title";
                $data['heading'] = "My Real Heading";

                $this->load->view('blogview', $data);
        }
}

فایل ویو را باز کنید و مقادیر داخل تگ‌های title و h1 را با متغییرها جایگزین کنید. کلید آرایه‌های کنترلر را به عنوان نام متغییرها در ویو استفاده کنید.

<html>
<head>
        <title><?php echo $title;?></title>
</head>
<body>
        <h1><?php echo $heading;?></h1>
</body>
</html>

با لود URL در مرورگر، باید مقادیر هر خانه آرایه، جایگزین متغییرها شود.

ساخت حلقه

داده ‌های ارسال شده از کنترلر به ویو، تنها محدود به آرایه یک بعدی نیست، بلکه با ارسال آرایه چند بعدی در ویو نیز به جای چندین متغییر، آرایه‌هایی چند بعدی خواهید داشت. برای مثال، در صورت دریافت داده‌ها از دیتابیس، معمولا در ویو آرایه‌هایی چند بعدی خواهید داشت. برای مثال، کنترلر را باز کرده و محتوای زیر را جایگزین محتوای آن کنید:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

                $data['title'] = "My Real Title";
                $data['heading'] = "My Real Heading";

                $this->load->view('blogview', $data);
        }
}

فایل ویو را باز کرده و در آن یک حلقه بسازید:

<html>
<head>
        <title><?php echo $title;?></title>
</head>
<body>
        <h1><?php echo $heading;?></h1>

        <h3>My Todo List</h3>

        <ul>
        <?php foreach ($todo_list as $item):?>

                <li><?php echo $item;?></li>

        <?php endforeach;?>
        </ul>

</body>
</html>

بازگرداندن ویو به عنوان داده

متد view پارامتر سومی نیز دارد که اختیاری است و اجازه می‌دهد تا رفتار این متد را به گونه‌ای تغییر دهید که به جای ارسال ویوها به مرورگر، آن‌ها را به صورت استرینگ برگرداند. در صورتی که می‌خواهید قبل از ارسال ویو به مرورگر، آن را مورد پردازش قرار دهید، این روش مفید است. برای اینکار باید پارامتر سوم را TRUE قرار دهید، مقدار پیش فرض این پارامتر FALSE است که در نتیجه ویو را به مرورگر ارسال می‌کند. فراموش نکنید که در صورتی که می خواهید ویو را پردازش کنید باید مقدار آن را در یک متغییر ذخیره کنید.

$string = $this->load->view('myfile', '', TRUE);
منبع
Views
اشتراک‌گذاری