草庐IT

php - 在 codeigniter 中为 View 加载代码片段

coder 2024-04-29 原文

所以我决定给 codeigniter 一个机会,并将我现有的所有自定义 php 站点转换为 codeigniter 框架。但是试图弄清楚如何在 codeigniter 中做到最好,这是我从我的原始站点所做的。在原始站点中,人们会访问诸如 index.php 之类的页面。在 index.php 代码中,它被分成这样的部分(这只是一个非常简单的例子):

索引.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 个故事并显示结果。

最新故事.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 中执行此操作的正确方向吗?

编辑

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

    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 框架。要使用它,您真的想要拥抱它而不是包含文件。您可以将代码重新调整为:

在你的 Controller 中:

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>

如果你想要第二个页面,内容不同但布局相同,你可以将它添加到你的 Controller 中:

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

并添加新模型等

关于php - 在 codeigniter 中为 View 加载代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416165/

有关php - 在 codeigniter 中为 View 加载代码片段的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  3. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  4. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  5. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  6. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  7. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  8. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  9. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  10. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

随机推荐