أفضل الممارسات: ما هي أفضل طريقة لبناء رؤوس وتذييلات؟

StackOverflow https://stackoverflow.com/questions/176856

  •  05-07-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لبناء رؤوس، والهوامش؟ يجب أن يطلق عليه كل من وحدة تحكم، أو تضمين من ملف الرأي؟ أنا باستخدام كود إغنيتر، وأنا يريد أن يعرف ما هو أفضل الممارسات لهذا الغرض. تحميل جميع الملفات رأي شمل من وحدة تحكم، مثل هذا؟

class Page extends Controller {

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

}

وأو استدعاء ملف عرض واحد، والدعوة وجهات النظر رأس وتذييل الصفحة من هناك:

//controller file    
class Page extends Controller {

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

   }

}

//view file

<?php $this->load->view('header'); ?>

<p>The data from the controller</p>

<?php $this->load->view('footer'); ?>

ورأيت عليها القيام به في كلا الاتجاهين، ولكن تريد أن تختار الآن قبل أن أذهب بعيدا جدا في طريق.

هل كانت مفيدة؟

المحلول

ويمكنك أيضا أن تجرب ذلك بهذه الطريقة - تحديد قالب العرض الافتراضية، والتي تسحب ثم في محتوى استنادا إلى متغير ( "المحتوى" في بلدي على سبيل المثال) مرت قبل وحدة تحكم.

في جهاز تحكم:

$data['content'] = 'your_controller/index';

// more code...

$this->load->vars($data);
$this->load->view('layouts/default');

وبعد ذلك تحديد التخطيط الافتراضي لكافة الصفحات على سبيل المثال عدد المشاهدات / تخطيطات / default.php

// doctype, header html etc.

<div id="content">
    <?= $this->load->view($content) ?>
</div>

// footer html etc.

وبعد ذلك وجهات نظركم فقط يمكن أن تحتوي على محتوى النقي على سبيل المثال عدد المشاهدات / your_controller / index.php قد تحتوي فقط على المتغيرات تنتقل من وحدة تحكم / مجموعة البيانات

<?= $archives_table ?>
<?= $pagination ?>
// etc.

مزيد من التفاصيل حول CI يكي / أسئلة وأجوبة في - (Q. كيف يمكنني تضمين وجهات النظر داخل وجهات النظر ؟ قوالب متداخلة؟ ...)

نصائح أخرى

في الواقع، بعد البحث هذا لا بأس به نفسي، لقد جئت إلى استنتاج مفاده أن أفضل الممارسات لإدراج الرؤوس والتذييلات في MVC هو الخيار الثالث - وهي تمتد وحدة تحكم قاعدة. وهذا يوفر لك المزيد من المرونة قليلا من اقتراح htxt، وخاصة إذا كنت بناء وحدات تخطيط جدا (وليس رأس وتذييل فقط، وأيضا لوحات الشريط الجانبي، والقوائم غير ثابت، الخ.).

أولا، تعريف فئة Base_controller، والتي يمكنك إنشاء الطرق التي تضيف عناصر صفحتك (رأس الصفحة وذيلها، وغيرها) إلى سلسلة الإخراج:

class Base_controller extends Controller
{
    var $_output = '';

    function _standard_header($data=null)
    {
        if (empty($data))
            $data = ...; // set default data for standard header here

        $this->_output .= $this->load->view('header', $data, true);
    }

    function _admin_header($data=null)
    {
        if (empty($data))
            $data = ...; // set default data for expanded header here

        $this->_output .= $this->load->view('admin_header', $data, true);
    }

    function _standard_page($data)
    {
        $this->_standard_header();
        $this->_output .=
            $this->load->view('standard_content', $data, true);
        echo $this->_output; // note: place the echo statement in a
                             // separate function for added flexibility
    }

    function _page_with_admin_header($data)
    {
        $this->_admin_header($data);
        $this->_output .=
            $this->load->view('standard_content', $data, true);
        echo $this->_output;
    }
}

وبعد ذلك، في وحدات تحكم صفحتك، ببساطة توسيع قاعدة الطبقة واستدعاء وظائف لبناء الصفحة.

class Page_controller extends Base_controller
{
    function index()
    {
        $data = ...; // Set content data here
        $this->_standard_page($data);
    }

    function admin()
    {
        $data = ...; // Set content and header data here
        $this->_page_with_admin_header($data);
    }
}

وعن طريق وحدة تحكم قاعدة، يمكنك تحقيق متاحة نظيفة جدا في التحكم الصفحة الفردية الخاصة بك ووجهات نظر منفصلة لعناصر في صفحة (السماح إعادة استخدام التعليمات البرمجية في كل وجهات النظر والتحكم). كل ما عليك القيام به هو تحديد صفحتك مشتركة "أقسام" (ما كنت قد تميل لدعوة 'شظايا') وظائف في وحدة التحكم الأساسي الخاص بك.

وإذا وحدة تحكم الأساس ينبغي أن تبدأ في النمو دون حسيب ولا رقيب (والذي يمكن أن يحدث على مواقع كبيرة)، يمكنك إعادة ترتيب بعض وظائف أقل العامة عن طريق وضعها في الفئات الفرعية، والسماح للتحكم الصفحة المقابلة تمتد تلك بدلا من الأصلي تحكم قاعدة.

واستمتع!

و/ ينس رولان

وأعتقد أن الطريقة الأولى التي تقوم بذلك هي الأنظف. ببساطة من وجهة نظر لمعرفة ما يجري التي ستقدم. بدلا من الاضطرار لدخول عرض ملف للعثور على بقية.

وانها ممارسة سيئة للدعوة وجهات النظر داخل وجهات النظر الأخرى. هذا يمكن أن يكون شكلا من أشكال رأي تحكم الاختلاط. وظيفة عرض في CI يسمح لك لتمرير المعلمة الثالث الذي يتسبب للعودة أن الناتج جهات النظر كسلسلة. يمكنك استخدام هذا لإنشاء طريقة عرض المجمع.

وعلى سبيل المثال:

class Page extends Controller {
   function index() {
      $data['page_title'] = 'Your title';

      $this->load->view('default_layout', array(
         'header'  => $this->load->view('header' , array(), true), 
         'menu'    => $this->load->view('menu'   , array(), true), 
         'content' => $this->load->view('content', $data  , true), 
         'footer'  => $this->load->view('footer' , array(), true), 
      ));
   }
}

وdefault_layout.php

<? echo $header, $menu, $content, $footer; ?>

وقد ترغب في الجمع بين رأس وتذييل لجعل قالب من هذا القبيل.

class Page extends Controller {
   function index() {
      $data['page_title'] = 'Your title';

      $this->load->view('default_template', array(
         'menu'    => $this->load->view('menu'   , array(), true), 
         'content' => $this->load->view('content', $data  , true), 
      ));
   }
}

وdefault_template.php

<html><head></head><body><span>Some Header HTML</span> // this is your header html
<? echo $menu, $content; ?>
<span>some footer HTML</span></body></html>  // this is your footer html
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top