Вы используете CodeIgniter, верно? У вас есть какое-то условие в вашей конфигурации, что вы должны использовать .php как расширение для всех URL? Если нет, то вы должны отправлять свои hrefs в «/ login», а не «/login.php». Кроме того, если вы не удалили «index.php» из своего URL-адреса в файле htaccess и в конфигурации CI, вам, вероятно, потребуется включить это в свои ссылки.
Более того, на вашем месте я бы не стал следить за тем, что делает Сарфраз в своем файле Mainpage.php. Вы не должны использовать стандартные PHP-включения в CodeIgniter. Все, что сделано с включением, может быть легко сделано путем загрузки представления. Например, если вы хотите загрузить представление в виде строки, вы можете сказать:
$loginViewString = $this->load->view('login.php', '', true);
Где второй параметр - это любая информация, которую вы хотите передать в ваше представление в ассоциативном массиве, где ключ - это имя переменной, которую вы будете передавать, а значение - это значение. То есть ...
$dataToPassToView = array('test'=>'value');
$loginViewString = $this->load->view('login.php', $dataToPassToView, true);
И затем в вашем представлении login.php вы можете просто ссылаться на переменную $ test, которая будет иметь значение «value».
Кроме того, вам не нужно объявлять этот маршрут входа в систему, поскольку вы просто перенаправляете его на контроллер входа в систему. То, что вы могли бы сделать, это иметь «пользовательский» контроллер с методом «login» и объявить свой маршрут следующим образом:
$routes['login'] = 'user/login';
EDIT ...
Хорошо, я думаю, что это, возможно, отклонило один или два шага слишком далеко в неправильном направлении. Давайте начнем сначала, не так ли?
Сначала давайте начнем со списка файлов, которые имеют отношение к этому обсуждению:
- application / controllers / main.php (это будет контроллер по умолчанию)
- application / controllers / user.php (это будет контроллер, обрабатывающий пользовательские запросы)
- application / views / header.php (Я обычно хотел бы хранить свои верхние и нижние колонтитулы как отдельные представления, но это не обязательно ... вы могли бы просто отобразить содержимое в виде строки в представлении "главной страницы" как вы делаете .... хотя я должен отметить, что в вашем примере кажется, что вы забыли вставить его в тело)
- Приложение / просмотров / footer.php
- application / views / splashpage.php (это содержимое страницы, которая будет содержать ссылку на вашу страницу входа в систему)
- application / views / login.php (это содержимое страницы входа)
- application / config / rout.php (это будет использоваться для перенаправления / входа в систему / user / login)
Итак, теперь давайте посмотрим на код в каждом файле, который даст то, что вы пытаетесь сделать. Сначала контроллер main.php (который снова будет вашим контроллером по умолчанию). Это будет вызвано, когда вы перейдете на корневой адрес вашего сайта ... www.example.com
приложение / контроллеры / main.php
class Main extends Controller
{
function __construct() //this could also be called function Main(). the way I do it here is a PHP5 constructor
{
parent::Controller();
}
function index()
{
$this->load->view('header.php');
$this->load->view('splashpage.php');
$this->load->view('footer.php');
}
}
Теперь давайте взглянем на верхний и нижний колонтитулы, а также на заставки:
Приложение / просмотров / header.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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="This is the text people will read about my website when they see it listed in search engine results" />
<title>Yustme's Site</title>
<!-- put your CSS includes here -->
</head>
<body>
application / views / splashpage.php - примечание: здесь нет причин, по которым вам нужен div-обертка ... он приведен только в качестве примера
<div id="splashpagewrapper">
<a href="/login">Click here to log in</a>
</div>
Приложение / просмотров / footer.php
</body>
<!-- put your javascript includes here -->
</html>
А теперь давайте посмотрим на контроллер пользователя и представление login.php:
приложение / контроллеры / user.php
class User extends Controller
{
function __construct() //this could also be called function User(). the way I do it here is a PHP5 constructor
{
parent::Controller();
}
function login()
{
$this->load->view('header.php');
$this->load->view('login.php');
$this->load->view('footer.php');
}
}
Приложение / просмотров / login.php
<div id="login_box">
<!-- Put your login form here -->
</div>
И, наконец, маршрут, по которому / login ищет / user / login:
приложение / Config / routes.php
//add this line to the end of your routes list
$routes['login'] = '/user/login';
И это все.Никакой магии или чего-то еще.Причина, по которой я привел тот факт, что вы можете загружать представления в виде строк, заключается в том, что вы можете не захотеть иметь отдельные представления «верхний колонтитул» и «нижний колонтитул».В этом случае вы могли бы просто «отобразить» представление как строку INTO другого представления.Другой пример - если у вас есть полная корзина товаров и вы хотите, чтобы корзина покупок и товары были отдельными представлениями.Вы можете перебирать свои элементы, загружая представление «shoppingcartitem» в виде строки для каждого элемента, объединять их вместе и выводить эту строку в представление «shoppingcart».
Так и должно быть.Если у вас остались вопросы, пожалуйста, дайте мне знать.