2010-08-04 3 views
4

Как создать основную страницу с помощью codeigniter?создать главную страницу с codeigniter

Эта страница должна содержать несколько ссылок, как логин, регистрации и т.д.

Я последовал TUT, чтобы создать экран входа в систему. Но это сделало codeigniter только для этой цели. Это сайт я говорю:

http://tutsmore.com/programming/php/10-minutes-with-codeigniter-creating-login-form/

Поэтому в основном то, что им пытаются есть, использование CodeIgniter для большего количества вещей, чем просто регистрационную форму.

Моя попытка routes.php я установить следующие параметры:

$route['default_controller'] = "mainpage"; 
$route['login'] = "login"; 

Мой mainpage.php файл:

class Mainpage extends Controller 
{ 
    function Welcome() 
    { 
     parent::Controller(); 
    } 

    function index() 
    { 

     $this->load->view('mainpage.html'); 
    } 
} 

Mainpage.html:

<HTML> 

<HEAD> 
<TITLE></TITLE> 
<style> 
     a.1{text-decoration:none} 
     a.2{text-decoration:underline} 
</style> 

</HEAD> 

<BODY> 

    <a class="2" href="login.php">login</a> 

</BODY> 
</HTML> 

login.php выглядит точно как на том сайте, на который я предоставил ссылку для этой должности:

Class Login extends Controller 
{ 
    function Login() 
    { 
     parent::Controller(); 
    } 

    function Index() 
    { 
     $this->load->view('login_form'); 
    } 

    function verify() 
    { 
     if($this->input->post('username')) 
     { //checks whether the form has been submited 
      $this->load->library('form_validation');//Loads the form_validation library class 
      $rules = array(
       array('field'=>'username','label'=>'username','rules'=>'required'), 
       array('field'=>'password','label'=>'password','rules'=>'required') 
      );//validation rules 

      $this->form_validation->set_rules($rules);//Setting the validation rules inside the validation function 
      if($this->form_validation->run() == FALSE) 
      { //Checks whether the form is properly sent 
       $this->load->view('login_form'); //If validation fails load the <b style="color: black; background-color: rgb(153, 255, 153);">login</b> form again 
      } 
      else 
      { 
       $result = $this->common->login($this->input->post('username'),$this->input->post('password')); //If validation success then call the <b style="color: black; background-color: rgb(153, 255, 153);">login</b> function inside the common model and pass the arguments 
       if($result) 
       { //if <b style="color: black; background-color: rgb(153, 255, 153);">login</b> success 
        foreach($result as $row) 
        { 
         $this->session->set_userdata(array('logged_in'=>true,'id'=>$row->id,'username'=>$row->username)); //set the data into the session 
        } 

        $this->load->view('success'); //Load the success page 
       } 
      else 
      { // If validation fails. 
        $data = array(); 
        $data['error'] = 'Incorrect Username/Password'; //<b style="color: black; background-color: rgb(160, 255, 255);">create</b> the error string 
        $this->load->view('login_form', $data); //Load the <b style="color: black; background-color: rgb(153, 255, 153);">login</b> page and pass the error message 
       } 
      } 
     } 
     else 
     { 
      $this->load->view('login_form'); 
     } 
    } 
} 

Что мне не хватает парней?

+0

Что такое ошибка/проблема? – Sarfraz

+0

Невозможно найти login.php, в основном это сообщение об ошибке «Объект не найден», «Ошибка 404». – Yustme

+0

вместо 'href =" login.php "', попробуйте 'href =" ./ login.php "' – Sarfraz

ответ

8

Вы с помощью CodeIgniter, верно? У вас есть какое-то условие в вашем конфиге, которое вы должны использовать .php как расширение для всех URL-адресов? Если нет, вы должны отправлять свои hrefs в «/ login», а не «/login.php». Кроме того, если вы не удалили «index.php» из своего URL-адреса в файле htaccess и в конфигурации CI, вам, вероятно, придется включить это в свои ссылки.

Кроме того, если бы я был вами, я бы не стал следить за тем, что делает Сарфраз в файле Mainpage.php. Вы не должны использовать стандартный PHP, включенный в CodeIgniter. Все, что делается с помощью include, можно легко выполнить, загрузив представление. Например, если вы хотите, чтобы загрузить представление в виде строки, вы можете сказать:

$loginViewString = $this->load->view('login.php', '', true); 

Если второй параметр вы хотите, передается на ваш взгляд в ассоциативном массиве любую информацию, где ключ; имя переменная, которую вы передадите, и значение - это значение. То есть ...

$dataToPassToView = array('test'=>'value'); 
$loginViewString = $this->load->view('login.php', $dataToPassToView, true); 

А затем в вашем логин.php, вы можете просто ссылаться на переменную $ test, которая будет иметь значение «value».

Кроме того, вам не нужно указывать этот маршрут «входа», поскольку вы просто перенаправляете его на контроллер «входа». Что вы могли бы сделать, это есть «пользователь» контроллер с методом «Логин» и объявить маршрут, как это:

$routes['login'] = 'user/login'; 

EDIT ...

ОК, я думаю, что это, возможно, заблудился один или два шага слишком далеко в неправильном направлении. Давайте начнем, не так ли?

Во-первых, давайте начнем со списком файлов, которые имеют отношение к этой дискуссии:

  1. приложение/контроллеры/main.php (это будет ваш «по умолчанию» контроллер)
  2. применение/controllers/user.php (это будет контроллер, который обрабатывает запросы, связанные с пользователем)
  3. application/views/header.php (Обычно мне нравится держать верхние и нижние колонтитулы в виде отдельных видов, но это не обязательно ...вы может просто отражать содержимое как строку в виде «главной страницы», как вы это делаете ... хотя я должен упомянуть, что в вашем примере кажется, что вы забываете эхо его в тело)
  4. приложение/просмотров/footer.php
  5. приложение/просмотров/splashpage.php (это содержание страницы, которая будет содержать ссылку на страницу входа в систему)
  6. приложение/просмотров/login.php (это содержание страницы входа)
  7. application/config/routes.php (это будет использоваться для перенаправления/входа в систему/пользователя/логина)

Итак, давайте посмотрим на код в каждом файле, который достигнет того, что вы пытаетесь сделать. Сначала контроллер 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'); 
    } 
} 

Теперь давайте посмотрим на заголовок, колонтитул и splashpage просмотров:

приложение/просмотров/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> 

приложение/просмотров/splashpage.php - примечание: нет никаких причин, почему вам нужен обертку DIV здесь ... это только поставить там в качестве примера

<div id="splashpagewrapper"> 
    <a href="/login">Click here to log in</a> 
</div> 

приложение/просмотров/колонтитула.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'); 
    } 
} 

приложение/просмотров/логин .php

<div id="login_box"> 
<!-- Put your login form here --> 
</div> 

И, наконец, маршрут, чтобы сделать/логин искать/пользователя/логин:

приложение/Config/routes.php

//add this line to the end of your routes list 
$routes['login'] = '/user/login'; 

И это все. Никакой магии или чего-то еще. Причина, по которой я объяснил, что вы можете загружать представления в виде строк, состоит в том, что вы не можете иметь отдельные представления «header» и «footer». В этом случае вы можете просто «отследить» представление в виде строки INTO в другом представлении. Другой пример: если у вас есть корзина с множеством предметов, и вы хотите, чтобы корзина покупок и элементы были отдельными видами. Вы можете выполнять итерацию через свои объекты, загружая представление «shoppingcartitem» в виде строки для каждого элемента, объединяя их вместе и повторяя эту строку в представлении «shoppingcart».

Так должно быть. Если у вас остались вопросы, сообщите мне.

+0

Я удалил файл index.php из CI i после этого учебника: http://www.anmsaiful.net/blog/php/remove-codeigniter-index-php.html и потому, что я изменил mainpage.html на .php, я получил 2 mainpage.php сейчас. Я изменил тот, который был .html на index.php. тело выглядит следующим образом: load-> view ('login.php', '', true); ?>login Теперь я не могу добраться до mainpage.php, который является параметром default_controller. 404 Страница не найдена. – Yustme

+0

Чтобы быть ясным, login.php находится в папке контроллера. Которая загружает представление login_form.php из папки просмотра. Нужно ли вообще звонить другому контроллеру с контроллера? главная страница - это контроллер, поэтому login.php – Yustme

+0

Hey Yustme. Я не могу больше точно сказать, что вы пытаетесь сделать, потому что я думаю, что было недоразумение. Я отредактирую сообщение, чтобы попытаться провести вас точно, как бы я собрал страницу «приземления» и страницу «входа». – treeface

2

Обратите внимание, что вы не указываете правильное имя метода для основного контроллера:

class Mainpage extends Controller 
{ 
    function Welcome() // < problem should be Mainpage 
    { 
     parent::Controller(); 
    } 

    function index() 
    { 

     $this->load->view('mainpage.html'); 
    } 
} 

Предложение:

Вместо того чтобы создавать HTML-страницы, создать страницу PHP и использовать команду include для включить файл login.php.

Mainpage.php:

<HTML> 

<HEAD> 
<TITLE></TITLE> 
<style> 
     a.1{text-decoration:none} 
     a.2{text-decoration:underline} 
</style> 

</HEAD> 

<BODY> 

    <?php include './login.php'; ?> 

</BODY> 
</HTML> 

И изменить ваш главный контроллер с именем этого файла, например:

class Mainpage extends Controller 
{ 
    function Mainpage() 
    { 
     parent::Controller(); 
    } 

    function index() 
    { 

     $this->load->view('mainpage.php'); 
    } 
} 
+0

Все еще не повезло. Я получаю эту ошибку: PHP-ошибка не была обнаружена Серьезность: Предупреждение сообщение: включить (./ login.php) [function.include]: не удалось открыть поток: нет такого файла или каталога Имя файла: вид/mainpage.php Line Номер: 1 I triple проверил все. – Yustme

+0

используйте абсолютный путь, подобный этому 'dir/dir2/login.php' Убедитесь, что вы указали правильный путь. Также дайте мне знать, можете ли вы указать путь к файлу hte login.php. – Sarfraz

+0

Абсолютный путь не работал ни с чем: . Я не понял ваш последний комментарий из «Также ....». – Yustme

1

Я думаю, вы должны добавить файл с именем .htaccess сначала в вашей домашней папке , например

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    # !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading 
    # slashes. 
    # If your page resides at 
    # http://www.example.com/mypage/test1 
    # then use 
    # RewriteBase /mypage/test1/ 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /test/index.php?/$1 [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    # If we don't have mod_rewrite installed, all 404's 
    # can be sent to index.php, and everything works as normal. 
    # Submitted by: ElliotHaughin 

    ErrorDocument 404 /index.php 
</IfModule> 

в опытном поле вам нужно добавить homefolder или BaseUrl

и вам нужно установить BaseUrl в конфигурации страницы как

$config['base_url'] = 'http://localhost/test'; 

И ссылку внутри страницы HTML должны быть <a class="2" href="http://localhost/test/Login">login</a>

В login_form странице вам нужно сделать URL действия, как

http://localhost/test/Login/verify 
Смежные вопросы