如何在codeigniter中查看部分逻辑,也可以重用其他部分视图

时间:2016-12-19 12:01:08

标签: php codeigniter cakephp

我想在视图部分做一些帮助,这样我就可以在整个项目的视图部分共享公共逻辑。

但似乎在CI中,没有像CakePhp这样的概念,我可以使用自定义助手。

我经常搜索但没有得到任何正确的结果。

下面我提到了我视图部分的一些代码。

<?php  $dt2 = strtotime($single->time_stamp);
 $dt1 = strtotime(date("Y-m-d H:i:s"));
  echo (int)(abs($dt1 - $dt2)/(60*60));?>

我在视图中使用了这些代码,但我想重复使用它。

我想调用一个自定义助手传递一个参数,因为另一个是当前日期。

有什么建议吗?

提前谢谢。

3 个答案:

答案 0 :(得分:1)

这将是你的助手应用程序/助手/ time_diff_helper.php:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

if (!function_exists('time_diff'))
{
    function time_diff()
    {
        $dt2 = strtotime($single->time_stamp);
        $dt1 = strtotime(date("Y-m-d H:i:s"));
        return (int)(abs($dt1 - $dt2)/(60*60));
    }
}

然后将其加载到您的控制器中:

$this->load->helper('time_diff');
$tdiff = time_diff();

如果将其加载到控制器中,您还应该能够在视图中使用它。人们会争辩说业务逻辑不属于视图,这种视图是用来格式化显示的。您的功能是业务逻辑的一部分还是布局的一部分......?我想这是一个解释问题。我会在控制器中调用它并将其传递给视图。

$data['time_diff'] = time_diff();
$this->load->view('myscreen1', $data);

答案 1 :(得分:0)

您可以使用CodeIgniter创建自定义帮助程序。你必须将它们放入应用程序/帮助程序中。

以下是:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

if (!function_exists('resize_uploaded_pix'))
{
    function resize_uploaded_pix($pic_full_path, $formatname)
    {
        //global $image_format;

        $config['image_library'] = 'gd2';
        $config['source_image']     = $pic_full_path; 
        $config['create_thumb']     = TRUE;
        $config['maintain_ratio']   = TRUE;

        /*
         * get session load lib and config
         */
        $CI =& get_instance();
        $CI->load->library('image_lib');
        $CI->config->load('myconfig', TRUE);
        $image_format = $CI->config->item('image_format', 'myconfig');   

您无法在帮助程序中访问$ this。因此,如果您需要在其中使用其他库,则需要获取如下的实例指针:

$CI =& get_instance();
$CI->load->library('image_lib');

然后从你的代码中调用帮助程序代码,在这种情况下是一个控制器(但在视图中应该是相同的),如下所示:

$this->load->helper('resize_pix');
resize_uploaded_pix($upload_data['upload_data']['full_path'], 'default');

答案 2 :(得分:0)

是的,非常简单,无需做额外的工作。

只需加载您在控制器或视图中或autoload.php中创建的帮助程序,

我在autoload.php

中加载了它
$autoload['helper'] = array('url','string','form','common_helper');

如果您希望在控制器/视图中加载它,请遵循此synatx。

$this->load->helper('common_helper');

然后下一步是调用帮助器,根据我的要求,我需要从视图中调用它,所以代码将是。

  <?php        echo time_diff($test->time_stamp);    ?> HOURS AGO

只需调用该函数,调用就像cakephp一样容易:)。

然后它会正常工作。

这对像我这样的人来说可能会有所帮助。 快乐的编码:)