Загрузка фрагментов кода в codeigniter для просмотра - PullRequest
3 голосов
/ 20 июня 2011

Так что я решил дать codeigniter шанс и преобразовать свой существующий сайт, который полностью настроен на php, в среду codeigniter.Но пытаясь выяснить, как сделать это лучше всего в codeigniter, что я делал со своего оригинального сайта.На оригинальном сайте человек посетит страницу, такую ​​как index.php.В коде index.php он разбит на следующие разделы (это очень простой пример):

index.php:

<html>
<head></head>
<body>

<div id="top">{$SECTION1}</div>
<div id="main">{$SECTION2}</div>
<div id="bottom">{$SECTION3}</div>

</body>
</html>

Затем в моем основном php-файле, который включенна каждой странице я запускаю запрос, который захватывает все «модули», которые назначены каждому разделу выше для страницы index.php.Итак, дайте мне все модули, которые назначены для {$ SECTION1}, {$ SECTION2} и {$ SECTION3} для index.php.Модуль в моей исходной системе - это просто php-файл, который выполняет определенную работу, поэтому у меня может быть модуль latest_story.php, и в сценарии он получает последние 10 историй из базы данных и отображает результаты.

latest_story.php

include('class/story/story_class.php');

$story = new Story($databaseconn);
$latest_story = $story->findLatestStory(10);

//If results back from $latest_story loop through it
//and display it however I want

Затем, используя буферизацию вывода, я выполняю каждый модуль, затем беру выводимую информацию из каждого модуля, назначенного каждому разделу, и заменяю этот раздел выводимыми данными.

Может ли это бытьсделано в codeigniter?Если так, то может ли кто-нибудь указать мне правильное направление при выполнении этого в codeigniter?

РЕДАКТИРОВАТЬ

Чтобы дать более четкое представление о том, что я делаю в исходной системе Iвыполнить запрос на каждой странице, чтобы определить, какие «модули» нужно захватить для текущей страницы, которую просматривает человек, затем выполнить этот код

    foreach($page_modules AS $curr_module)
    {

        $module_section = intval($curr_module->section);
        $module_file = $global_function->cleanData($curr_module->modfile);
        $module_path = MODS .$module_file;

        if(is_file($module_path))
        {

            ob_start();
            include($module_path);
            ${'global_pagemod' .$module_section} .= ob_get_contents();
            ob_end_clean();

        }

    }

Затем я просто беру каждую переменную, созданную для каждого раздела, и заменяю {$РАЗДЕЛ [n]} с этой переменной в шаблоне.

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Я пытаюсь создать "модули", которые выполняют конкретные задачи изатем в бэкэнде можно будет динамически размещать эти модули в разных разделах сайта.Я думаю, вы можете сказать, что это как WordPress, но более простой подход.В Wordpress вы можете добавить модуль, а затем назначить его своим страницам в левом, среднем или правом столбце.Я пытаюсь сделать то же самое.

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

Я делаю это так:

Контроллер :

function about()
{

    $user_session = $this->model_user_lite->Session_Check();
    $data['auth'] = $user_session;
    $user_id = $this->model_user_lite->Session_UserID();
    $data['user_id'] = $user_id;


    $this->load->view( 'main_about.php', $data );

}

Просмотр :

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

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

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




    <div class="box">
        <div class="box-top"></div>
        <div class="box-center">
            <div class="content">



                    <center>
                        <h2><?= lang('MAIN_ABOUT_CAPTION_TEAM'); ?></h2>
                        <div class="hr"></div>
...

База заголовков :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<link rel="shortcut icon" href="<?= base_url(); ?>/favicon.ico" type="image/x-icon">
<link rel="icon" href="<?= base_url(); ?>/favicon_animated.ico" type="image/x-icon">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />



    <meta property="fb:admin_id" content="677920913" />
    <meta property="fb:app_id" content="<?= FACEBOOK_APPID; ?>" />
    <meta property="og:site_name" content="<?= SITE_NAME; ?>" />
<?php if ( empty( $og_title ) === FALSE ): ?>
    <meta property="og:title" content="<?= $og_title; ?>" />
<?php endif ?>
...

Таким образом, у вас есть чистая файловая система, отдельный заголовок, вы можете даже иметь больше заголовков, как вам нравится, и можете назначать все данные из контроллера навид.

** Переменные, которые назначаются с контроллера, также переходят к представлениям, загруженным вашим "основным видом".

Я использую его на крупном сайте знакомств, и он работает как шарм.

2 голосов
/ 21 июня 2011

По сути, Codeigniter является платформой MVC.Чтобы использовать это, вы действительно хотите охватить это, а не включать файлы.Вы можете изменить свой код как:

В вашем контроллере:

function example()
{

  $this->load->model('story_model','story');
  $data['section1'] = $this->story->latest();
  $data['section2'] = $this->story->top_stories(5);
  $data['section3'] = $this->story->most_popular();
  $this->load->view('example', $data );
}

В вашей модели:

function latest()
{
  return $this->db->limit(1)->get('stories');
}
etc.

На ваш взгляд:

<html>
....
<div id="latest">
<h2><?php echo $section1->title; ?></h2>
<?php echo $section1->body; ?>
</div>
<div id="top">
<?php foreach $section2 as $popular { ?>
<h2><?php echo $popular->title; ?></h2>
<?php echo $popular->body; ?>
<?php foreach} ?>
</div>
</html>

Если вам нужна вторая страница с другим содержимым, но с одинаковым макетом, вы добавите это в свой контроллер:

function second_page()
{

  $this->load->model('tags_model','tag');
  $this->load->model('authors_model','author');
  $data['section1'] = $this->tag->latest();
  $data['section2'] = $this->tag->top_tags(5);
  $data['section3'] = $this->author->most_popular();
  $this->load->view('example', $data );
}

, добавите новые модели и т. Д.

2 голосов
/ 20 июня 2011

Вы можете передать полученные данные в виде массива в главное представление, а затем получить доступ к этим данным в подпредставлениях. Например: Главный вид

$posts = $this->post_model->fetch_all();
$top_data = $this->more_data_model->fetch_more_data();
$data = array('posts'=>$posts,'top_data'=>$top_data);
$this->load->view('main_view',$data);

Затем на главном экране вы загружаете подпредставления:

$data = array('data_name'=>$top_data);
$this->load->view('top_view',$data);

А затем в подпредставлении вы просто используете данные, как хотите. Возможно, есть более эффективный способ сделать это, но я верю, что это поможет. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...