создать главную страницу с codeigniter - PullRequest
4 голосов
/ 04 августа 2010

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

На этой странице должно быть несколько ссылок, таких как логин, регистрация и т. Д.

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

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

В общем, то, что я пытаюсь сделать, это использовать codeigniter для большего количества вещей, чем просто форма для входа.

Моя попытка route.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');
        }
    }
}

Что мне не хватает, ребята?

Ответы [ 3 ]

8 голосов
/ 04 августа 2010

Вы используете 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 ...

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

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

  1. application / controllers / main.php (это будет контроллер по умолчанию)
  2. application / controllers / user.php (это будет контроллер, обрабатывающий пользовательские запросы)
  3. application / views / header.php (Я обычно хотел бы хранить свои верхние и нижние колонтитулы как отдельные представления, но это не обязательно ... вы могли бы просто отобразить содержимое в виде строки в представлении "главной страницы" как вы делаете .... хотя я должен отметить, что в вашем примере кажется, что вы забыли вставить его в тело)
  4. Приложение / просмотров / footer.php
  5. application / views / splashpage.php (это содержимое страницы, которая будет содержать ссылку на вашу страницу входа в систему)
  6. application / views / login.php (это содержимое страницы входа)
  7. 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».

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

2 голосов
/ 04 августа 2010

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

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');
    }
}
1 голос
/ 29 января 2016

Я думаю, вы должны сначала добавить файл с именем .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>

в поле теста вам нужно добавить вашу домашнюю папку или 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...