PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从原生PHP转换为Codeigniter大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有以下数据库PHP.我正在尝试制作类别菜单的无序列表.
原始的PHP本身正在工作.
我正在尝试在codeigniter中将其转换为MVC,以下是到目前为止我无法使用的内容.
如果有人指出我在做什么错,我将不胜感激.

数据库

create table IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `shortdesc` varchar(255) NOT NULL,
  `longdesc` text NOT NULL,
  `status` enum('active','inactive') NOT NULL,
  `parentid` int(11) NOT NULL,
  PRIMary KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

-- 
-- Dumping data for table `categories`
-- 

INSERT INTO `categories` (`id`, `name`, `shortdesc`, `longdesc`, `status`, `parentid`) VALUES (1, 'shoes', 'Shoes for boys and girls.', '', 'active', 7);
INSERT INTO `categories` (`id`, `name`, `shortdesc`, `longdesc`, `status`, `parentid`) VALUES (2, 'shirts', 'Shirts and blouses!', '', 'active', 7);
...
...
@H_893_0@menu.PHP(原始PHP,可以正常工作)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <Meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>View Tasks</title>
</head>
<body>
<h3>Menu</h3>
<?PHP 
function make_list ($parent) {

    global $data;
    echo '<ul>';

    foreach ($parent as $task_id => $todo) {

        echo "<li>$todo";

        if (isset($data[$task_id])) { 

            make_list($data[$task_id]);
        }

        echo '</li>';

    }
    echo '</ul>';

} 

$dbc = @MysqLi_connect ('localhost', 'root1', 'root', 'ci_day6') OR die ('<p>Could not connect to the database!</p></body></html>');

$q = 'SELECT id, parentid, name FROM categories ORDER BY parentid ASC'; 
$r = MysqLi_query($dbc, $q);

$data = array();

while (list($id, $parentid, $Name) = MysqLi_fetch_array($r, MysqLI_NUM)) {

    $data[$parentid][$id] =  $name;

}

make_list($data[0]);

?>

</body>
</html>

PHP输出以下html

@H_620_10@menu

    * clothes
          o shoes
          o shirts
          o pants
          o dresses
    * fun
          o toys
          o games

到目前为止,我的MVC无法正常工作.

cat_menu_model.PHP(模型)

<?PHP

class Cat_menu_model extends Model
{
         function Cat_menu_model()
        {
            parent::Model();

        }

        function get_categories_nav()
        {

            $data = array();
            $this->db->SELEct('id,name,parentid');
            $this->db->where('status', 'active');
            $this->db->orderby('parentid','asc');
            $this->db->orderby('name','asc');

            $Q = $this->db->get('categories');
        if ($Q -> num_rows() > 0){
          foreach ($Q -> result_array() as $row){
          $data[$row['parentid']][$row['id']] = $row['name'];
          }
          }

           $Q->free_result(); 
           return $data; 

        }
}

cat_menu.PHP(控制器)

<?PHP

class Cat_menu extends Controller
{

    function Cat_menu()
    {
        parent::Controller();
    }
    function make_menu($parent)
    {
        $this->load->model('cat_menu_model');

        $data['navlist'] = $this->cat_menu_model->get_categories_nav();
            $this -> load ->view('menu');
    }
}
@H_893_0@menu.PHP(查看)

<?PHP
if (count($navlist))
{
  $this->make_menu($data[0]);
  echo '<ol>';
    foreach ($parent as $id => $catName) {

        echo "<li>$catname";

        if (isset($data[$id])) { 

        make_menu($data[$id]);

        }

        echo '</li>';

    } 
 echo '</ol>';
}
?>

显示一条错误消息.

A PHP Error was encountered

Severity: Warning

message: Missing argument 1 for Cat_menu::make_menu()

Fil@R_944_8371@: controllers/cat_menu.PHP

Line number: 10

解决方法:

鉴于上面的PHP错误消息,也就是说您已经告诉Cat_menu :: make_menu()@L_675_32@接受一个参数.在这种情况下,Cat_menu控制器中的@L_805_35@make_menu($parent).

如果此函数不需要任何输入-看起来好像没有使用$parent-那么只需从make_menu中删除$parent参数即可.

或者,如果您希望函数不接受任何参数,请设置认值.见下文:

cat_menu.PHP(控制器)

<?PHP

class Cat_menu extends Controller
{

    function Cat_menu()
    {
        parent::Controller();
    }

    function make_menu($parent = falSE) //Is this $parent argument needed?
    {
        $this->load->model('cat_menu_model');

        $data['navlist'] = $this->cat_menu_model->get_categories_nav();

        //If you want to parse data to a view you need to state it
        $this->load->view('menu', $data);
    }
}

假设其余代码正确无误,那么现在应该可以了.从现在开始,请参阅@L_673_43@.特别是views documentation解析值.

此后,OP *在以下评论中做出了回应,这是我的回应.

** OP =原始海报*

在视图中运行print_r($navlist)时. OP获得以下输出

Array ( 
    [0] => Array ( 
        [7] => clothes 
        [8] => fun 
    ) 
    [7] => Array ( 
        [3] => pants 
        [2] => shirts 
        [1] => shoes 
    ) 
    [8] => Array ( 
        [6] => games 
        [5] => toys 
    )
)

但是,值得注意的是,OP的CI模型ActiveRecord查询与原始(非MVC)查询明显不同:

SELECT 
    id, 
    parentid, 
    name 
FROM 
    categories 
ORDER BY 
    parentid ASC

$this->db->SELEct('id,name,parentid');
$this->db->where('status', 'active');
$this->db->orderby('parentid','asc');
$this->db->orderby('name','asc');
$Q = $this->db->get('categories');

CI模型查询与开始时的原始sql不同.转换为sql时,将产生以下内容

SELECT
    id, 
    name,
    parentid
FROM
    categories
WHERE
    status = 'active'
ORDER BY
    parentid ASC,
    name ASC

但是,这似乎是正确的数据,因此我将继续.

OP希望将数组格式化为层次结构.有关将来的参,请参阅:PHP/MySQL – building a nav menu hierarchy.最简单的@L_675_32@是遵循OP的原始(非MVC)功能并将其添加为模型功能.该模型函数将创建一个嵌套数组,而不是直接的html输出-原因是将应用程序逻辑与输出分开.

您可以将以下内容作为函数添加到模型中.最初取自Nested sets, php array and transformation,但由于OP出现错误而被重写:

function to_hierarchy($collection = NULL)
{
    if (is_null($collection)) return false;

    $tree = array();

    foreach($collection[0] as $key => $value)
    {
        $tree[$value] = array();

        foreach($collection[$key] as $item)
        {
            array_push($tree[$value], $item);
        }
    }

    return $tree;
}

现在,我们可以将控制器更新为以下内容

cat_menu.PHP(控制器)

<?PHP

class Cat_menu extends Controller
{

    function Cat_menu()
    {
        parent::Controller();
    }

    function make_menu($parent = falSE) //Is this $parent argument needed?
    {
        $this->load->model('cat_menu_model');

        $get_nav_list = $this->cat_menu_model->get_categories_nav();

        $format_nav_list = $this->cat_menu_model->to_hierarchy($get_nav_list);

        //Load the HTML Helper for ul/ol conversion
        $this->load->Helper('html');

        $data['navlist'] = $format_nav_list;

        //If you want to parse data to a view you need to state it
        $this->load->view('menu', $data);
    }
}

现在,我们可以将视图更新为以下内容

@H_893_0@menu.PHP(查看)

<?PHP
    echo ul($navlist);
?>

免责声明:以上内容均未使用PHP进行过测试,因为我目前无法从此计算机访问解释器.请确保您检查了所有语法.

大佬总结

以上是大佬教程为你收集整理的如何从原生PHP转换为Codeigniter全部内容,希望文章能够帮你解决如何从原生PHP转换为Codeigniter所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: