【问题标题】:displaying products with categories显示带有类别的产品
【发布时间】:2016-09-30 09:17:54
【问题描述】:

我在 codeigniter 中遇到了 uri 段的问题我正在寻找开发产品和产品详细信息,所以我为它创建了一个控制器并传递了一个产品名称参数以在 url 中显示产品名称,所以我的 url 将变成这样

本地主机/项目名称/产品/产品名称

这部分对我来说很好,但我很困惑如果我想显示为产品类别和产品名称,就像我试图让我的网址像这样

localhost/project_name/products/category_name /product_name

所以当我传入类别名称时,我现在将如何执行此操作,它显示 404 not found 找不到您请求的页面。因为有时会显示直接产品,有时如果用户通过类别浏览产品详细信息,那么类别名称将在 url 中传递,以及这些细分如何工作?我对此有很大的困惑

这是我的产品控制器

public function products($product_name) {
        if($this->uri->segment(3)) {
            $category = ucwords(str_replace('-', " ", $product_name));
            $product  = ucwords(str_replace('-', " ", $this->uri->segment(3)));
        } else {
            $product  = ucwords(str_replace('-', " ", $product_name));
        }

        $page_data = $this->get_data->get_Data($product, 'name', 'products');
        $data['title'] = 'Products - ' . $page_data->row()->name;
        $data['body_class'] = 'poductsdetails';

        $this->load->view('includes/header.php', $data);
        $this->load->view('templates/navigation.php');

        $data['content'] = array(
                'name'        => $page_data->row()->name,
                'price'       => $page_data->row()->price,
                'description' => $page_data->row()->description,
                'picture'     => $page_data->row()->picture,
                'category'    => $page_data->row()->category,
            );

        $this->load->view('products/details', $data);
        $this->load->view('templates/footer-form.php');
        $this->load->view('includes/footer.php');
    }

这是我创建的路线

$route['default_controller'] = 'home';
$route['admin']              = 'admin/index';
$route['admin/([a-z])']      = 'admin/$1';
$route['products/(:any)']    = 'home/products/$1';
$route['products/(:any)']    = 'home/products/$1/$2';
$route['products/(:any)']    = 'home/products/$1/$2/$3';
$route['(:any)']             = 'home/page/$1';
$route['(:any)']             = 'home/page/$1/$2';

【问题讨论】:

  • 传递类别名称查看单个产品详情是没有用的
  • 嗯,这是我客户的要求,他是为了 seo 目的而做的,我被困在这里

标签: php codeigniter


【解决方案1】:

如果 category_name 是这个控制器中定义的函数,那么试试这个

$route['products/category_name/(:any)'] = 'products/category_name/$1';

【讨论】:

    【解决方案2】:

    你刚刚在路由中传递了一个参数,这就是它找不到的原因

    像这样改变你的路线

    $route['products/(:any)']    = 'home/products/$1';
    $route['products/(:any)/(:any)']    = 'home/products/$1/$2';
    $route['products/(:any)/(:any)/(:any)']    = 'home/products/$1/$2/$3';
    

    它会起作用的。

    【讨论】:

    • 是的,它起作用了,谢谢你能解释一下 (:any),因为我知道 products 将是文件夹名称,那么 (:any) 指的是什么?
    • (:any) 这是一个参数,它将作为产品或类别传入 url,就像您添加 $1 或 $2 一样。
    • 非常感谢非常感谢你有很多知识谢谢
    • 欢迎光临。我的知识不多,我和你一样也是学生:)
    • 像我一样学习很棒 我有 2 年 4 年的 wordpres 经验和 2 年的 php 经验,刚刚开始研究 codeigniter 希望现在能学到很多东西
    猜你喜欢
    • 2018-11-09
    • 2017-03-20
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    相关资源
    最近更新 更多