Как можно объединить разные страницы в codeigniter? - PullRequest
0 голосов
/ 02 сентября 2011

Допустим, я разделяю свою страницу на 4 части.Один баннер, один логин, один главный, другой нижний колонтитул.Banner и Footer статичны, они не изменятся.и вход в систему основан на различном праве пользователя или статусе входа, наконец, главное основано на многих вещах, которые это делают.Итак, у меня есть 4 части элемента:

http://localhost:8888/my_app/index.php/static_page/banner

http://localhost:8888/my_app/index.php/static_page/footer

http://localhost:8888/my_app/index.php/user/login_fragment

http://localhost:8888/my_app/index.php/system/main_fragment

Но пользователь видит только одну страницу, но он объединяет весь персонал в ... Так что вместо использования iframe для их объединения, как я могупусть эти страницы разделяют логику, но можно объединить в одном представлении?Спасибо.

Ответы [ 4 ]

3 голосов
/ 02 сентября 2011

Я хочу поделиться тем, что я сделал.Хотя это и не оригинальная идея (не помню, откуда я взялся), надеюсь, это поможет вам.У меня есть папка «include» [application / views / includes], которая содержит следующие файлы:

footer.php, header.php, navigation.php и template.php

Теперь код в template.php выглядит следующим образом:

$this->load->view('includes/header'); 
$this->load->view($main_content); 
$this->load->view('includes/footer');

Для использования приведу пример:

$data = array (
  'page_title'    => 'Users Listing',
  'title'         => 'Users Listing',
  'main_content'  => 'users/showlist',            
);

$this->load->view('includes/template', $data));

Элементы в $массив данных, будет доступен в представлении [application / views / users / showlist.php] в виде $ page_title, $ title и т. д. Вы также можете отправлять массивы или содержимое HTML.

0 голосов
/ 02 сентября 2011

Фил Стерджон (Phil Sturgeon) написал популярную библиотеку шаблонов для Codeigniter, которая будет делать то, что вы хотите, умнее, чем то, что было описано в других ответах до сих пор. Вы можете прочитать его документацию здесь: http://philsturgeon.co.uk/demos/codeigniter-template/user_guide/

Документация может занять некоторое время, чтобы понять, потому что в ней отсутствуют примеры.

Вы можете скачать библиотеку шаблонов здесь: https://github.com/philsturgeon/codeigniter-template

0 голосов
/ 02 сентября 2011

Прежде всего

$this->load->view('filename');

Может использоваться столько раз, сколько вы хотите в одной и той же функции контроллера, и они будут отображаться в правильном порядке.

То, что вы сделали, является отдельнымв частях контроллеров, которые должны использоваться в одном контроллере.Я полагаю, у вас есть эти файлы в таких файлах, как

/application/controllers/static_page.php
/application/controllers/user.php
/application/controllers/system.php

И без масштабной модификации CodeIgniter вы не можете вызвать контроллер с другого контроллера, что вас останавливало.Если вам нужно использовать один и тот же код обработки для многих функций, вы должны создать либо helper , который вы можете использовать где угодно, либо более элегантное решение, имеющее общие функции контроллера в / library / MY_Controller.php.

MY_Controller.php будет вызываться всегда до вызова контроллера

<?php

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

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        // you can do any kind of processing here
        // in example if you have some view counter
        // this place is always called
    }

    function a_generic_function($rawdata)
    {
        // do some processing here

        return $data;
    }


}

Тогда вы сможете использовать эту функцию в любом из ваших контроллеров:

$this->a_generic_function($rawdata);

Теперь самый умный способ справиться с верхним и нижним колонтитулом - создать файл «макета», содержащий как верхний, так и нижний колонтитулы.

Вот пример представления layout.php:

<!doctype html>
<head>
    <meta charset="utf-8">
    <title><?php echo $title; ?></title>
</head>
<body>
    <div id="container">
        <header>This page has been made by <?php echo $user_name; ?>/header>

        <div id="main" role="main">
            <?php echo $main_content_view; ?>
        </div>

        <footer>Write your footer here</footer>
    </div>
</body>
</html>

Вы видите, что в середине $ main_content_view.

С этим вы будете делать в своем контроллере:

// add the HTML for the login to the variable
// TRUE means we don't output it in the browser, but put it in a String
$this->viewdata["main_content_view"] = $this->load->view('login', $data, TRUE);

// want to add more data? just ADD it to the variable, like a String
$this->viewdata["main_content_view"] += $this->load->view('main', $data, TRUE);

// done? send it to the layout, and pass it the $this->viewdata
$this->load->view('layout', $this->viewdata);

Что еще вы можете сделать с этим?Вы можете использовать $ this-> viewdata, например:

$this->viewdata["title"] = 'Function title';
$this->viewdata["user_name"] = $user_name;

, чтобы вы могли редактировать макет столько раз, сколько хотите, как и любой другой вид.

0 голосов
/ 02 сентября 2011

Просто позвоните load-> view несколько раз

в вашем методе контроллера:

function index()
{
 $this->load->view("banner",array(/** some parameters if you want **/));
 $this->load->view("main",array(/** some parameters if you want **/));
 $this->load->view("footer"); // this one doesn't need parameters maybe
}

См. Страницу документации

Примечание: внутри самого файла представления (например, внутри banner.php) вы можете снова вызвать load-view для вставки вложенного представления.

Примечание2: вы также можете вернуть результат load-> view в переменную, если вы не хотите выводить его сразу, добавив истинный параметр в качестве 3-го параметра:

$login_box = $this->load->view("login",array(),true);

// $login_box contains the view html.

echo $login_box; // or pass it as a parameter to another view if you want
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...