Codeigniter несколько просмотров - PullRequest
1 голос
/ 04 июня 2011

Я загрузил три представления из моего контроллера

$this->load->view('header_view');
$this->load->view('home_view');
$this->load->view('footer_view');

И рассмотрите в header_view , я открываю оператор if и закрываю его в нижнем колонтитуле

<?php
if(!$viewable){
echo "You cant view";
}else{
?>

И в footer_view я закрываю else

<?php
}
?>

Но этот код выдает мне ошибку. Ошибка разбора: синтаксическая ошибка, неожиданное '}' в header_view.php

Можно ли открыть оператор if в одном представлении и закрыть его в другом представлении??? ... или любое альтернативное решение ??? ...

Ответы [ 5 ]

3 голосов
/ 04 июня 2011

В отличие от HTML, блоки кода PHP должны иметь открывающий и закрывающий теги.Зачем?Поскольку коды PHP анализируются на сервере перед отправкой запрашивающей стороне (пользователю), а HTML и js - наоборот.

Это означает, что вы не можете «вырезать» блоки кода php (если, в то время как,for, foreach и т. д.) и поместите вторую половину в другой файл.Он не будет анализироваться как полный код PHP.

Чтобы запустить ваш код, попробуйте следующие коды:

<?php
// Make the necessary security validations here 
// then set the value of $viewable
// ...
///
// After that...

if(!$viewable){
   echo "You can't view this page.";
}else{
   $this->load->view('header_view');
   $this->load->view('home_view');
   $this->load->view('footer_view');
}
?>

... или если вы хотите сохранить верхний и нижний колонтитулы шаблона:

<?php
// Make the necessary security validations here 
// then set the value of $viewable
// ...
///
// After that...

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

if(!$viewable){
   echo "You can't view this page.";
}else{
   $this->load->view('home_view');
}


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

?>

Я надеюсь, что это то, что вы ищете.Если нет, скажи мне.

2 голосов
/ 04 июня 2011

По моему опыту, это не очень хорошая идея для перемещения кода между представлениями.Поскольку представление - это отдельная сущность, и вам никогда не нравится создавать зависимые представления.Как его уменьшить повторное использование.

И невозможно открыть скобку if в одном представлении и закрыть в другом.

Я на 100% уверен, что должен быть какой-то другой способ достичь того, что вы пытаетесь сделать

1 голос
/ 04 июня 2011

Нет, вы не можете запустить блок if в одном представлении и закрыть его в другом.

Я бы принял решение в контроллере, что-то вроде:

$this->load->view('header_view');
if(!$viewable) {
    $this->load->view('denied_view');
}
else {
    $this->load->view('home_view');
}
$this->load->view('footer_view');

или даже лучше, используйте представление шаблона.

Итак, ваш контроллер будет:

$data = array();
if(!viewable) {
    $data['main_content'] = 'denied_view';
}
else {
    $data['main_content'] = 'home_view';
}
$this->load->view('template_view', $data);

тогда template_view.php (в каталоге просмотра) будет:

$this->load->view('header_view');
$this->load->view($main_content);
$this->load->view('footer_view');

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

1 голос
/ 04 июня 2011

Передайте имя исходного вида вашему контроллеру заголовка и загрузите его туда.

Контроллер:

$this->load->view('header_view', array('view_name' => 'home_view'));

представление заголовка:

if ($viewable) {
  $this->load->view($view_name);
}
0 голосов
/ 04 июня 2011

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

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