Включите все функции codeigniter в новую статическую страницу (файл php), которая находится в корневой папке

Я занимаюсь разработкой сайта, на котором много статических страниц. поэтому я создал контроллер только для динамических страниц (это может быть неправильной практикой). Хранение всех других статических файлов в корневой папке. Теперь я хочу использовать функцию base_url() из codeigniter для статических страниц, которая находится в корневой папке. Но я не уверен, что делаю хорошую практику или нет. Итак ** Пожалуйста, дайте мне решение для управления многими статическими страницами в codeigniter. **

2 ответа

Решение

Вы можете создать контроллер с именем Static_page, отправлять все ваши запросы на статические страницы этому контроллеру.

Статический контроллер

class Static_Page extends CI_Controller{


    function index(){
       $page = $this->uri->segment(1,'default_static_page');
       if (!file_exists(APPPATH."views/{$page}.php"))
         {
           show_404();
         } 
       $this->load->view($page);
   }

}

сохраните все свои статические страницы как представления с тем же именем, что и uri, на который вы будете звонить, как если бы вы позвонили по адресу http://your-site.com/about-us ваше представление будет about-us.php, http://your-site.com/contact ваш взгляд будет contact.php

Это не так просто, как просто указать путь к файлу, который вам нужен. Если мы используем URL Helper в качестве примера, вы заметите в верхней части файла следующую строку:

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Это означает, что если BASEPATH не определено, вы не сможете получить доступ к файлу. Предположим, у вас есть статическая страница в корне, называемая my_static_page.php, Вы могли бы определить BASEPATH и включите файл, например так:

define('BASEPATH',true);
require_once 'system/helpers/url_helper.php';

Это позволит вам получить доступ к сценарию, но это не обязательно означает, что все функции будут работать. Например, anchor функция будет работать, но base_url не будет. Некоторые функции могут иметь определенные зависимости, требующие функциональности от других компонентов CodeIgniter.

Получая доступ к файлам прямо в корне вашего проекта, вы эффективно обходите CodeIgniter. index.php файл. Этот файл будет гарантировать, что все необходимые пути настроены, базовые классы созданы, глобальные функции доступны и т. Д. Функция загрузки CodeIgniter ($this->load->helper('url');), который также не будет использоваться в этом сценарии, будет загружать / предоставлять доступ к экземпляру CI среди прочего, что, как вы можете видеть, требуется в base_url функция:

function base_url($uri = '')
{
    $CI =& get_instance();
    return $CI->config->base_url($uri);
}

Короче говоря, потребуется много времени и усилий, чтобы гарантировать, что все функции CodeIgniter доступны для других файлов в корне. Он также сводит на нет многие полезные функции, предоставляемые платформой, и рекомендуемый шаблон проектирования MVC. Я бы посоветовал загружать ваши статические страницы в виде представлений, используя контроллер - вы можете найти это руководство из руководства пользователя CodeIgniter особенно полезным.

Другие вопросы по тегам