如何在codeigniter中通过代理自动加载移动模板?

发布于 2024-11-13 03:59:07 字数 203 浏览 2 评论 0原文

dir:
application
 -controllers 
 -models
 -views
 -mobile_views

当我使用$this->load->view并通过iPhone或其他手机查看时,如何在mobile_views自动加载模板?

dir:
application
 -controllers 
 -models
 -views
 -mobile_views

How do I auto load templates at mobile_views when I use $this->load->view and view by iphone or other mobile phone?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

失与倦" 2024-11-20 03:59:07

检查这个

你可以通过两种方式做到这一点。
方法一:非常简单。在上面的答案(我给出的链接)中,在 MyController 函数的末尾添加以下行,

$this->load->_ci_view_path  . = $this->view_type .'/';

您就完成了。您可以像普通视图加载一样简单地加载视图。

方式二:
要基于用户代理自动加载视图,我认为您可以使用钩子来实现它。要实现此挂钩,您需要按照以下步骤

  1. autoload.php中自动加载用户代理库

    $autoload['libraries'] = array('user_agent');

  2. config.php中启用挂钩

    $config['enable_hooks'] = TRUE;

  3. 未在 post_controller_constructor 上实现挂钩。将以下代码添加到 hooks.php

    $hook['post_controller_constructor'][] = array('class' => 'Loadview',
    '功能' => '加载',
    '文件名' => 'loadview.php',
    '文件路径' => “钩子”
    );

  4. 现在在 hooks 目录下创建一个名为 loadview.php 的页面,并包含以下代码

class Loadview
{

    public static $MOBILE_PLATFORM = 'mobile';
    public static $DEFAULT_PLATFORM = 'default';

    public function load(){
        $this->CI =& get_instance();
        $view_type = $this->CI->agent->is_mobile() ? self::$MOBILE_PLATFORM : self::$DEFAULT_PLATFORM;
        $this->CI->load->_ci_view_path = $this->CI->load->_ci_view_path . $view_type .'/';
    }

}
  1. 代码现在已经完成了。您可以像普通视图加载一样简单地加载视图。

Check this

You can do it in two way.
Way 1: Its very simple. In the above answer (the link I have given) add following line in the end of MyController function

$this->load->_ci_view_path  . = $this->view_type .'/';

You are done. You can simply load view like normal view load.

Way 2:
To autoload a view based on user agent, I think you can implement it using hooks. To implement this hooks you need to follow the following steps

  1. Autoload user agent library in autoload.php

    $autoload['libraries'] = array('user_agent');

  2. Enable hooks in config.php

    $config['enable_hooks'] = TRUE;

  3. Not implement hooks on post_controller_constructor. Add following codes to hooks.php

    $hook['post_controller_constructor'][] = array('class' => 'Loadview',
    'function' => 'load',
    'filename' => 'loadview.php',
    'filepath' => 'hooks'
    );

  4. Now create a page named loadview.php under hooks directory having following code

class Loadview
{

    public static $MOBILE_PLATFORM = 'mobile';
    public static $DEFAULT_PLATFORM = 'default';

    public function load(){
        $this->CI =& get_instance();
        $view_type = $this->CI->agent->is_mobile() ? self::$MOBILE_PLATFORM : self::$DEFAULT_PLATFORM;
        $this->CI->load->_ci_view_path = $this->CI->load->_ci_view_path . $view_type .'/';
    }

}
  1. You are done now. You can simply load view like normal view load.
燃情 2024-11-20 03:59:07

要从“视图”之外的另一个目录加载视图,我发现这个论坛主题很有帮助

http:// codeigniter.com/forums/viewthread/132960/

function external_view($path, $view, $vars = array(), $return = FALSE)
    {
        $full_path = $path.$view.'.php';
        if (file_exists($full_path)) 
        {
            return $this->_ci_load(array('_ci_path' => $full_path, '_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
        }
        else
        {
            show_error('Unable to load the requested module template file: '.$view);
        }
    } 

您可以通过控制器完成其余的工作。

to load views from another dir aside from "views", i found this forum topic to be helpful

http://codeigniter.com/forums/viewthread/132960/

function external_view($path, $view, $vars = array(), $return = FALSE)
    {
        $full_path = $path.$view.'.php';
        if (file_exists($full_path)) 
        {
            return $this->_ci_load(array('_ci_path' => $full_path, '_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
        }
        else
        {
            show_error('Unable to load the requested module template file: '.$view);
        }
    } 

and you can work the rest from the controller.

顾北清歌寒 2024-11-20 03:59:07

我在控制器中执行此操作:

public function index()
{   
    if($this->agent->is_mobile())
    {
        $this->load_mobile();   
    }   
    else
    {
        $this->load_web();
    }
}

public function load_mobile()
{
    $this->load->view('mobile/home');
}

public function load_web()
{
    $this->load->view('web/home');
}

通过这种方式,我可以将不同的数据添加到移动设备和网页。

我还扩展了默认控制器并添加了一些有用的额外功能:

  • 启用母版页/模板的使用。
  • 可以添加css和javascript文件。
  • 使用 _output 方法来控制控制器输出。
  • 可以以模块(视图)的形式加载相关内容,

这样我可以更好地管理不同的页面。

再见!!

I do this in my controller:

public function index()
{   
    if($this->agent->is_mobile())
    {
        $this->load_mobile();   
    }   
    else
    {
        $this->load_web();
    }
}

public function load_mobile()
{
    $this->load->view('mobile/home');
}

public function load_web()
{
    $this->load->view('web/home');
}

In this way I can add different data to mobile and to web pages.

I also extend the default controller and add some useful extra features:

  • Enables the usage of master page/templates.
  • Can add css and javascript files.
  • Uses the _output method for controlling the controllers output.
  • Can load relative content with in the form of modules (views)

So I can manage better the different pages.

Bye!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文