正在视图的codeigniter中加载代码段


Loading snippets of code in codeigniter for the view

因此,我决定给codeigniter一个机会,并将我现有的所有自定义php站点转换为codeigniters框架。但我试图弄清楚如何在代码点火器中做到最好,我正在从我的原始网站上做这件事。在最初的网站中,一个人会访问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页面上面每个部分的所有"模块"。因此,请给我分配给index.php的{$SECTION1}、{$SECTION 2}和{$SECTTION3}的所有模块。我的原始系统中的模块只是一个执行特定任务的php文件,所以我可能有一个名为latestrongtory.php的模块,在脚本中,它从数据库中获取最后10个故事并显示结果。

latestrongtory.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

然后使用输出缓冲,我执行每个模块,然后从分配给每个部分的每个模块中获取输出信息,并用输出的数据替换该部分。

这可以在代码点火器中完成吗?如果是这样的话,有人能在代码点火器中为我指明正确的方向吗?

编辑

为了更清楚地了解我在原始系统中所做的事情,我在每个页面上运行一个查询,以确定要为当前页面获取哪些"模块",然后运行此代码

    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();
        }
    }

然后,我只需取为每个部分创建的每个变量,并将{$section[n]}替换为模板中的那个变量。

附加编辑

我想做的是能够创建执行特定任务的"模块",然后在后端能够将这些模块动态地放置在整个网站的不同部分。我想你可以说它像wordpress,但更简单的方法。Wordpress您可以添加一个模块,然后将其分配给左列、中列或右列的页面。我试着做同样的事情。

基本上,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 );
}

并添加新型号等。

您可以将检索到的数据作为数组传递到主视图,然后访问子视图上的数据。例如:主视图

$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);

然后在子视图中,您只需按照自己的意愿使用数据即可。也许有一种更有效的方法可以做到这一点,但我相信这会奏效

我这样做:

控制器

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

这样你就有了一个干净的文件系统,独立的头,你甚至可以随心所欲地拥有更多的头,并且可以将控制器中的所有数据分配给视图。

**从控制器分配的变量也会转到"主视图"加载的视图。

我正在一个主要的交友网站上使用它,它就像一个魅力。