如何在CodeIgniter中将anchor()函数扩展为anchor_admin()?

时间:2013-03-08 14:44:28

标签: php codeigniter codeigniter-2 codeigniter-url codeigniter-routing

我想基于CodeIgniter中的 anchor()函数创建一个名为 anchor_admin()的函数。

我在想:

我已在 config.php 文件中定义了管理员路径,例如像这样:

$config['base_url'] = '';
$config['base_url_admin']   = 'my-custom-admin-folder';

然后

我需要以某种方式创建一个扩展anchor()函数的新anchor_admin()函数。

所以不要输入:

<?php echo anchor('my-custom-admin-folder/gallery', 'Gallery', 'class="admin-link"'); ?>

我只会输入:

<?php echo anchor_admin('gallery', 'Gallery', 'class="admin-link"'); ?>

但输出总是:

<a href="http:/localhost/my-custom-admin-folder/gallery" class="admin-link">Gallery</a>

基本上我只需要在核心anchor()函数生成的url末尾添加配置变量$ this-&gt; config-&gt; item('base_url_admin')。

怎么做?

我要创建哪些文件以及放置在哪里?

我想创建一个助手不是要走的路。

我应该创建一个库,还是可以将它作为一个函数放在我已经创建的应用程序的核心文件夹中的MY_Controller文件中,我用它来加载一些东西?

1 个答案:

答案 0 :(得分:2)

在CodeIgniter中,您可以'扩展'帮助程序('extend'在这种情况下是一个捕获所有术语,因为它们实际上不是类)。这允许您添加自己的辅助函数,这些函数将加载标准函数(在您的情况下,URL Helper)。

这里的CodeIgniter文档中解释了这一点 - http://ellislab.com/codeigniter/user-guide/general/helpers.html

在您的情况下,您需要执行以下操作:

1-在MY_url_helper.php

中创建文件application/helpers/

2-创建您的anchor_admin()功能,如下所示:

function anchor_admin($uri = '', $title = '', $attributes = '') {

    // Get the admin folder from your config
    $CI =& get_instance();
    $admin_folder = $CI->config->item('base_url_admin');

    $title = (string) $title;

    if ( ! is_array($uri)) {

        // Add the admin folder on to the start of the uri string
        $site_url = site_url($admin_folder.'/'.$uri);

    } else {

        // Add the admin folder on to the start of the uri array

        array_unshift($uri, $admin_folder);

        $site_url = site_url($uri);

    }

    if ($title == '') {

    $title = $site_url;

    }

    if ($attributes != '') {

    $attributes = _parse_attributes($attributes);

    }

    return '<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>';

}

3-使用帮助程序并按照惯例运行:

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

echo anchor_admin('controller/method/param', 'This is an Admin link', array('id' => 'admin_link'));

希望有所帮助!