【问题标题】:Navigation menus not working as expected in CodeIgniterCodeIgniter 中的导航菜单无法按预期工作
【发布时间】:2017-06-17 04:26:21
【问题描述】:

我正在使用 CodeIgniter v3.1.3。基于“静态页面”教程,我正在尝试创建一个包含 5 个页面的静态网站,例如主页、关于、服务、投资组合和联系人。

我在 'application/controllers' 目录中有一个 Pages.php 控制器。

我的 Pages.php 控制器看起来像

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

class Pages extends CI_Controller {
    //Controller logic
    public function view($page = 'home')
    {
        if(!file_exists(APPPATH.'views/pages/'.$page.'.php')){
            //Whoops!, we don't have a page for that
            show_404(); //In-built CI function to show 404 error pages
        }

        $data['title'] = ucfirst($page); //Capitalize the first letter
        $this->load->view('templates/header',$data);
        $this->load->view('pages/'.$page,$data);
        $this->load->view('templates/footer',$data);
    }
}

我还在'application/views/pages' 中创建了 5 个静态页面,例如 home.php、about.php、services.php、portfolio.php、contact.php

页眉和页脚的常用代码存在于'application/views/templates',如footer.php & header.php。 我在 header.php 中的导航菜单看起来像

<li><a class="curr_menu" href="<?php echo base_url('pages/view/home');?>">Home</a>
</li>
<li><a class="page-scroll" href="<?php echo base_url('pages/view/about');?>">About Us</a>
</li>
<li><a class="page-scroll" href="<?php echo base_url('pages/view/services');?>">Services</a>
</li>
<li><a class="page-scroll" href="<?php echo base_url('pages/view/portfolio');?>">Portfolio</a>
</li>
<li><a class="page-scroll" href="<?php echo base_url('pages/view/contact');?>">Contact Us</a>
</li>

我的 routes.php(application/config/routes.php) 看起来像

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

主页显示为初始加载,但是当我单击任何菜单项时,它会返回“404 Page Not Found”错误。

谁能解释一下 - 使用清晰的代码 - 显示以使我的菜单正常工作。 .htaccess 根目录包含

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

【问题讨论】:

  • 您管理过.htacess 文件吗?
  • 是的,我有一个 htaccess 文件。我已经编辑了我的问题以包含我的 htaccess 文件
  • href="&lt;?php echo base_url('index.php/pages/view/home');?&gt;" 是否有效。尝试一次
  • 添加 index.php 后它可以工作,但我不想在我的 URL 中显示 index.php
  • 试试下面编辑的答案。在这里完美工作。

标签: php html css codeigniter


【解决方案1】:

为了使用base_url(),你必须先在你的控制器中加载url helper。像这样

 public function __construct(){
    parent::__construct();
    $this->load->helper('url');

       }

或者你可以在application/config/autolaod.php加载它。像这样...

$autoload['helper'] = array('url');

别忘了将bae_url设置为application/config/config.php

$config['base_url'] = 'your_url';

还有

$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

在您的根文件夹中。 .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

【讨论】:

  • 是的@Hek,它就像 $autoload['helper'] = array('url');
  • 尝试从控制器加载。
  • 是的@Hek,就像你上面提到的那样有一个配置代码
  • @Hekmat 你错过了在控制器中加载 url 帮助程序的 parent::__construct()
  • 问题仍然存在。在 config.php 中它的 $config['base_url'] = 'localhost/asci';其中“asci”是我的项目文件夹。
【解决方案2】:

您的网址可能是错误的。您的默认控制器是
“页面/视图” ?? 如果是这样,那么导航菜单应该是这样的:

<li><a class="curr_menu" href="<?=base_url()?>home">Home</a>
</li>
<li><a class="curr_menu" href="<?=base_url()?>about">About Us</a>
</li>
<li><a class="curr_menu" href="<?=base_url()?>services">Services</a>
</li>
<li><a class="curr_menu" href="<?=base_url()?>portfolio">Portfolio</a>
</li>
<li><a class="curr_menu" href="<?=base_url()?>contact">Contact Us</a>
</li>

而在 config.php 文件中,

$config['base_url'] = 'http://yoururl/'; //should be followed by forward slash (/)
    $config['index_page'] = '';

【讨论】:

    【解决方案3】:

    我强烈建议您通过在地址栏中手写 URL 来手动导航到所需页面,以确保错误来自链接构建。

    如果是这样,那么尝试使用

    <?php echo site_url('pages/view/home');?>
    

    【讨论】:

    • 用 site_url() 更改 base_url() 会产生相同的页面未找到错误
    猜你喜欢
    • 2018-07-04
    • 2020-05-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多