Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[Решено] Проверка, какая текущая страница - условие в php


Recommended Posts

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

<?php if (Текущая страница=Главная) { ?>

<div class="1"></div><?php }

else { ?>

<div class="2"><?php echo $heading_title; ?>

</div> <?php } ?>

Т.е скрипт должен проверять, что открытая страница является главной (home), и выводить один блок, а если не главная, то другой.

Вопрос в том, как прописать это условие?

Link to comment
Share on other sites


Наверняка есть какой-то параметр, где хранится ссылка текущей страницы (common/home), но как его узнать и как правильно прописать?

Или есть какие-то функции для определения текущей страницы?

  • +1 1
Link to comment
Share on other sites


Я задаю значение в контроллере страницы home:

$this->data['current_page']='home';

В шаблоне задаю: <?php if ($current_page=='home') { ?>

Но вылезает ошибка Notice: Undefined variable: current_page in Z:homemagazin1wwwcatalogviewthemedefaulttemplatecommonheader.tpl on line 74

Все верно, т.к проверяется значение в header.tpl, а в контроллере хедера переменная не задекларирована.

Как получить значение переменной из контроллера home в контроллере header?

Заметил, что например заголовок можно получить,там есть такая строка: $this->data['title'] = $this->document->getTitle();

Видимо как то аналогично, но как прописать?

Link to comment
Share on other sites


добавьте сквозную переменную в класс "document" [=== upload/system/library/document.php ===] аналогично той же "title".

а потом уже в контроллере home присваивайте ей необходимое значение и проверяйте в шаблоне.

обрамите свой код в соответствующие тэги

Edited by afwollis
  • +1 1
Link to comment
Share on other sites

2kes,

Придумал новую переменную - current_page. Далее пошагово, какие строки куда добавлял:

1. В файле document.php (system/library/) добавил две функции - получение новой переменной и передача новой переменной:

public function setCurrent($current_page) {

$this->current_page = $current_page;

}

public function getCurrent() {

return $this->current_page;

}

2. В файле home.php (catalog/controller/common) устанавливаем значение переменной:

$this->document->setCurrent('home');

3. В файле header.php (catalog/controller/common) получаем значение переменной:

$this->data['current_page'] = $this->document->getCurrent();

4. Ну и в конце концов, в файле шаблона header.tpl (catalog/view/theme/default/template/common) задаем условие, которое проверяет значение этой переменной:

<?php if ($current_page=='home') { ?>

<div class="1"></div><?php }

else { ?>

<div class="2"><?php echo $heading_title; ?>

</div> <?php } ?>

  • +1 2
Link to comment
Share on other sites


  • 1 month later...

Огромное спасибо!

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

Link to comment
Share on other sites


По моему вы тут велосипед изобретаете... У меня реализовано проще:

if (!isset($this->request->get['route'])) {
	  $this->request->get['route']='common/home'; // Чтобы не выдавало ошибку, если юзер набрал адрес в браузере руками
}


if ($this->request->get['route']=='common/home') {
	 echo 'Я на главной';
} else {
	 echo 'А это уже не главная страница';
}

P.S. По аналогии можно и другие страницы идентифицировать...

  • +1 5
Link to comment
Share on other sites


  • 9 months later...

По моему вы тут велосипед изобретаете... У меня реализовано проще:

if (!isset($this->request->get['route'])) {
	  $this->request->get['route']='common/home'; // Чтобы не выдавало ошибку, если юзер набрал адрес в браузере руками
}


if ($this->request->get['route']=='common/home') {
	 echo 'Я на главной';
} else {
	 echo 'А это уже не главная страница';
}

P.S. По аналогии можно и другие страницы идентифицировать...

Да. Но если страницы статические то это не работает. Допустим у меня будет в главном меню две ссылки на статью, а переменная $this->request->get['route'] будет равна information/information, и обоих случаях

Link to comment
Share on other sites


Да. Но если страницы статические то это не работает. Допустим у меня будет в главном меню две ссылки на статью, а переменная $this->request->get['route'] будет равна information/information, и обоих случаях

Проверяйте по id статьи.

Link to comment
Share on other sites


Ну, можно сделать условие в случае отсутствия переменной

 

скажите пожалуйста, а как точнее условие прописать?

Link to comment
Share on other sites


  • 2 weeks later...

Проверяйте по id статьи.

А как условие для проверки id статьи прописать? Что то не вдуплюсь.

ВДУПЛИЛСЯ :-)

$this->request->get['information_id']==
Edited by DAN
Link to comment
Share on other sites


  • 8 months later...

2kes,

Придумал новую переменную - current_page. Далее пошагово, какие строки куда добавлял:

1. В файле document.php (system/library/) добавил две функции - получение новой переменной и передача новой переменной:

public function setCurrent($current_page) {

$this->current_page = $current_page;

}

public function getCurrent() {

return $this->current_page;

}

2. В файле home.php (catalog/controller/common) устанавливаем значение переменной:

$this->document->setCurrent('home');

3. В файле header.php (catalog/controller/common) получаем значение переменной:

$this->data['current_page'] = $this->document->getCurrent();

4. Ну и в конце концов, в файле шаблона header.tpl (catalog/view/theme/default/template/common) задаем условие, которое проверяет значение этой переменной:

<?php if ($current_page=='home') { ?>

<div class="1"></div><?php }

else { ?>

<div class="2"><?php echo $heading_title; ?>

</div> <?php } ?>

Почему то выдаёт ошибку

Notice: Undefined property: Document::$current_page in /system/library/document.php on line 22

Уже Разобрался СПАСИБО!

 

Edited by Romans281
Link to comment
Share on other sites


В document.php после объявления класса надо добавить

private $current_page;
Link to comment
Share on other sites

а  $_SERVER['REQUEST_URI']  чем не подходит??

+1. 

Не стоит городить в контроллерах лишнего, да и не за чем.

  • +1 1
Link to comment
Share on other sites


  • 1 month later...

Приветствую, уважаемые форумчане.

Никак не могу разобраться с выделением пунктов. OCstore 1.5.5.1.2

Пытаюсь в вертикальном меню сделать инфу, в горизонтальном - категории.

Пробовал самым простым на мой взгляд путем - по url с переменной $og_ulr и вышеупомянутым $_SERVER['REQUEST_URI'], оба при сравнении с текстовой строкой вида "/index.php?route=information/information&information_id=4" дают false. И нужный пункт не светится. Если текст в кавычках обозначить за переменной, например, $about - та же петрушка.

 

Что-то видимо делаю не так.

 

Как вариант думал проверять по $information_id для вертикального меню с инфой и id категории ($path) для горизонтального.

Но вертикальное делаю вместо модуля категорий, в category.tpl, в его контроллере не упомянута $information_id вообще, ее надо там определить судя по всему. И задать ей нужное значение. Как это сделать - не нашел. Без этого работает только на информационных страницах.

Аналогично в хедере нет переменной $path.

 

Такие пироги. С php до этого не сталкивался вообще, а сделать надо. Надеюсь на вашу помощь.

 

 

 

upd:

 

https://opencartforum.com/topic/11529-resheno-proverka-kakaia-tekuschaia-stranitca-uslovi/?do=findComment&comment=75457

проделал штуки из этого поста. $current_page = $information_id и $current_page = $category_id в соответствующих контроллерах. По идее при большом количестве информационных страниц (>10) могут возникнуть траблы с одинаковыми id.

А так работает. Спасибо)

Edited by Reddie
Link to comment
Share on other sites


  • 6 months later...

Я сделал может и по ленивом, но действенно и просто. Редактировал только header.tpl
Вверху вставил код:

<?php 
  $path = "common/home";
  $url = $_SERVER['REQUEST_URI'];
  if ($url == "/" or strripos($url, $path)) {
    $is_home = TRUE;
  }else{
    $is_home = false;
  }            
?>

И далее в шапке делал проверку:

<?php if (!$is_home) {echo "other_header";} ?>

или наоборот:

<?php if ($is_home) {echo "home_header";} ?>
  • +1 3
Link to comment
Share on other sites

  • 1 year later...

Ну раз уж подняли старую тему, то и я спрошу) 

 

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

 

На данный момент для главной реализовано вот так:

    <?php if (!isset($this->request->get['route']) || (isset($this->request->get['route']) && $this->request->get['route'] == 'common/home')) { ?>
     
    <!-- здесь вставить что-то только для главной страницы -->
     
    <?php } else {?>
     
    <!-- здесь вставить что-то для всех остальных страниц, кроме главной  -->
     
    <?php } ?>

Взято отсюда

 

Подскажите, как сюда добавить условие для еще одной страницы (пускай её id=4), чтоб на ней элемент тоже не показывался?

  • +1 1
Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.