سؤال

تحديث:

لقد جربت كود Sheldon أدناه ولكني واجهت مشكلتين:

  1. عند استخدام الخط $this->load->view($page->template, array('content' => $page->content), TRUE);غير قادر على تحميل الملف المطلوب .php ولكن إذا قمت بتغييره إلى $page->content أنه يعمل بشكل جيد.

  2. عندما أضع وظائف الفهرس في وحدات التحكم الأخرى، فإنه لا يزال يقوم بتحميل وحدة التحكم الرئيسية الافتراضية على الرغم من تعيين مقطع uri عليه.كيف يمكنني ضبط النموذج ليعمل؟

السؤال الأصلي:

لدي ملف template.php الذي يضم بنية موقعي الرئيسية.لنفترض أن لدي صفحة تسمى "الصفحة الرئيسية".أرغب في تعيين $title و ال $content البيانات من قاعدة البيانات.

لقد قمت بتعيين طريقة عرض لكل صفحة وأيضًا وحدة تحكم.لقد حاولت:

$this->cms_pages->name;

وهذا لا ينتج شيئا.أعلم أنني بحاجة للحصول على مقطع URI ولكن لأنني أستخدمه /$sales->name لست متأكدًا مما إذا كان علي تغييره إلى $sales->id لهذا العمل.أود الحصول عليه بالاسم.أفضل الممارسات مهمة أيضًا.

هل هناك طريقة يمكنني من خلالها القيام بشيء مثل: $this->cms_pages->id->1->name?

نموذج

function getCMSPages() {

    $query = $this->db->get('pages');
    if($query->num_rows() > 0) return $query->result();
}

نموذج

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller {

public function index()
{
$data['cms_pages'] = $this->navigation_model->getCMSPages();
$data['title'] = 'Ccho';
$data['content'] = $this->load->view('home', NULL, TRUE);
$this->load->view('template', $data);
}
}

نموذج

 $stylesheetCSS = array('href' => 'includes/css/style.css', 'rel' => 'stylesheet',   'type' => 'text/css', 'media' => 'print');

echo doctype('html5');
?>
<head>
 <title>Housemovers : <?php echo $title ?></title>
  <?php echo link_tag($stylesheetCSS);?>
   </head>
 <body>
<div id ="wrapper">
<header>
<p>content</p>
</header>
<nav>
    <ul>
    <?php if($this->session->userdata('logged_in')): ?>
        <li><?php echo anchor('#','Edit Pages');?>
        <?php if(is_array($cms_pages)): ?>
                <ul>
                    <?php foreach($cms_pages as $page): ?>
                    <li><a href="<?=$page->title?>"><?= $page->title?></a></li>
                    <?php endforeach; ?>
                </ul>
            <?php endif; ?>
            </li>
        <li><?php echo anchor('#','Gallery');?>
        <ul>
            <li><?php echo anchor('admin/addgallery','Add Gallery');?></li>
            <li><?php echo anchor('admin/uploadimage','Upload Image');?>
            </li>
            <li><?php echo anchor('#','Delete Gallery');?></li>
        </ul>
        </li>
        <li><?php echo anchor('#','Sales');?>
        <ul>
            <li><?php echo anchor('admin/addsale','Add Sale');?></li>
            <li><?php echo anchor('#','Edit Sale');?>
            <?php if(is_array($sales_pages)): ?>
                <ul>
                    <?php foreach($sales_pages as $sale): ?>
                    <li><a href="editsale/index/<?=$sale->id?>"><?= $sale->name?></a></li>
                    <?php endforeach; ?>
                </ul>
            <?php endif; ?>
            </li>

            <li><?php echo anchor('#','Delete Sale');?></li>
            <li><?php echo anchor('admin/home/logout','Log Out');?></li>
        </ul>
        </li>
    <?php else: ?>
    <ul>
    <li><?php echo anchor('home','Home');?></li>
    <li><?php echo anchor('about','About Us');?></li>
    <li><?php echo anchor('gallery','Gallery');?></li>
    <li><?php echo anchor('testimonials', 'Testimonials');?></li>
    <li><?php echo anchor('sales','Sales');?></li>
    <li><?php echo anchor('contact','Contact Us');?></li>
    </ul>
    <?php endif; ?>
    </ul>
</nav>
 <section id="content">
    <h1><?= $title ?></h1>

    <p><?= $content ?></p>

</section>

<footer>&copy; Houses LTD <?php echo date('Y');?></footer>
</div> <!-- Wrapper Close -->

</body>
هل كانت مفيدة؟

المحلول

كما قال @davzie؛

نموذج

function getCMSPage($page_name = '') {

    if(!$page_name) $page_name= 'home'; // home be default.    
    $this->db->where('name', $page_name);
    $query = $this->db->get('pages', 1);
    if($query->num_rows() == 1) return $query->row();
}

مراقب

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller {

public function index()
{
$page = $this->navigation_model->getCMSPage($this-uri->segment(1)); // pretend the first segment in your URI is the page you want.
$data['cms_pages'] = $this->navigation_model->getCMSPages();
$data['title'] = $page->name;
$data['content'] = $this->load->view($page->template, array('content' => $page->content), TRUE);
$this->load->view('template', $data);
}

}

نصائح أخرى

قد ترغب في التفكير في وجود وظيفة تحصل على تفاصيل الصفحة حسب اسمها.سيؤدي هذا بدوره إلى تشغيل وظيفة مثل getIdByName($page_name = false)

ومن هناك سيكون لديك المعرف الذي يمكنك سحبه من قاعدة البيانات والحصول على الصفحة الصحيحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top