Codeigniter всегда загружается в контроллер - PullRequest
0 голосов
/ 21 марта 2011

Я из России, извините за плохой английский.Я хочу загрузить шаблон на каждой странице в контроллере.Например (синтаксический анализатор библиотеки в автозагрузке),

class Blog extends CI_Controller {
$header = array(
'header' => 'Welcome to my blog!'
);
$this->parser->parse('header', $header);

function index() {
...
echo "My text";
}   

header.php:

<h1>{header}</h1>
<script>
alert("Welcome!");
</script>

Но я получаю PHP-ошибку: синтаксическая ошибка, неожиданный T_VARIABLE, ожидающий T_FUNCTION в строке 6.Строка 6:

$header = array(

Как мне загрузить заголовок на каждой странице?Благодаря.

Ответы [ 4 ]

1 голос
/ 21 марта 2011

config.php:

$autoload['libraries'] = array('parser');

контроллер blog.php:

<?php

class Blog extends Controller {

function __construct() 
    {
            parent::Controller();
            $header = array('header' => 'Welcome to my blog!');
            $this->parser->parse('header', $header);
    }

function index()
    {
        echo "Мой текст";
    }


}
?>

view header.php:

{header}

у меня это работает ..

0 голосов
/ 21 марта 2011

При загрузке свойств класса, как ваш $header выше, php ожидает, что видимость свойства будет объявлена ​​перед именем переменной. PHP5 имеет три варианта видимости: «публичный», «приватный» или «защищенный». Я думаю, именно поэтому вы получаете "неожиданный T_VARIABLE". Разница между ними описана в swik.net как:

Для защиты от загрязнения доступности в PHP v5 введены 3 префикса для объявления методов или переменных класса: открытый, защищенный и закрытый.

Открытые методы и переменные доступны вне класса. Защищенные доступны только изнутри класса и унаследованных или родительских классов. Частные доступны только из самого класса.

попробуйте это: (Я выбрал «публичную» видимость, вы можете определить, что подходит для вашего использования)

public $header = array('header'=>'Welcome to my blog");

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

function _construct(){
    parent::_construct();
    $this->parser->parse('header',$this->header);
}

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

Обновление:

Ваш комментарий предполагает, что парсер работает не так, как вы ожидаете. Я полагаю, вы разместили

$this->parser->parse('header,$this->header);

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

function blog(){
    $this->load->library('parser');
    $this->parser->parse('header',$this->header);
}
0 голосов
/ 21 марта 2011

Возможно, это ошибка ввода, но в коде из header.php вы набрали {header}, где, как мне кажется, должно быть {$header}

0 голосов
/ 21 марта 2011

попробуйте вызвать массив с $ this-> header

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...