Перейти к содержанию

Рекомендуемые сообщения

Помогите чайнику.  что нужно сделать? И как убрать ошибку в шапке сайта? 

 

Notice: Undefined variable: og_image in /home/photol06/golden-frog37.ru/www/system/storage/modification/catalog/view/theme/default/template/common/header.tpl on line 23

 

файл headler.tpl выглядит вот так

 

<!DOCTYPE html>
<!--[if IE]><![endif]-->
<!--[if IE 8 ]><html dir="<?php echo $direction; ?>" lang="<?php echo $lang; ?>" class="ie8"><![endif]-->
<!--[if IE 9 ]><html dir="<?php echo $direction; ?>" lang="<?php echo $lang; ?>" class="ie9"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html dir="<?php echo $direction; ?>" lang="<?php echo $lang; ?>">
<!--<![endif]-->
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><?php echo $title;  ?></title>
<base href="<?php echo $base; ?>" />
<?php if ($description) { ?>
<meta name="description" content="<?php echo $description; ?>" />
<?php } ?>
<?php if ($keywords) { ?>
<meta name="keywords" content= "<?php echo $keywords; ?>" />
<?php } ?>
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo $og_url; ?>" />
<?php if ($og_image) { ?>
<meta property="og:image" content="<?php echo $og_image; ?>" />
<?php } else { ?>
<meta property="og:image" content="<?php echo $logo; ?>" />
<?php } ?>
<meta property="og:site_name" content="<?php echo $name; ?>" />
<script src="catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
<link href="catalog/view/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen" />
<script src="catalog/view/javascript/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<link href="catalog/view/javascript/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,400i,300,700" rel="stylesheet" type="text/css" />
<link href="catalog/view/theme/default/stylesheet/stylesheet.css" rel="stylesheet">
<?php foreach ($styles as $style) { ?>
<link href="<?php echo $style['href']; ?>" type="text/css" rel="<?php echo $style['rel']; ?>" media="<?php echo $style['media']; ?>" />
<?php } ?>
<script src="catalog/view/javascript/common.js" type="text/javascript"></script>
<?php foreach ($links as $link) { ?>
<link href="<?php echo $link['href']; ?>" rel="<?php echo $link['rel']; ?>" />
<?php } ?>
<?php foreach ($scripts as $script) { ?>
<script src="<?php echo $script; ?>" type="text/javascript"></script>
<?php } ?>
<?php foreach ($analytics as $analytic) { ?>
<?php echo $analytic; ?>
<?php } ?>

				<?php if(!$countdown['view']){ ?>
				<link href="catalog/view/theme/default/stylesheet/countdown.css" rel="stylesheet">
				<style type="text/css">
				<?php if($countdown['border']){ ?>
					.count-timer{
						border: 1px solid <?php echo $countdown['border_color']; ?>;
					}
				<?php } ?>
					.count-timer div.timer-clock>div{
						background: <?php echo $countdown['clock_color1']; ?>;
						background: linear-gradient(to bottom, <?php echo $countdown['clock_color1']; ?>, <?php echo $countdown['clock_color2']; ?>);
					}
				</style>
				<script src="catalog/view/javascript/countdown.js" type="text/javascript"></script>
				<script type="text/javascript">
				var text = {};
				<?php if($countdown['action']){ ?>
				text.action     = "<?php echo $countdown['action']; ?>";
				<?php } else { ?>
				text.action       = "<?php echo $text_action; ?>";
				<?php } ?>
				<?php if($countdown['action']){ ?>
				text.action_end     = "<?php echo $countdown['action_end']; ?>";
				<?php } else { ?>
				text.action_end = "<?php echo $text_action_end; ?>";
				<?php } ?>
				<?php if($countdown['day']){ ?>
				text.day        = "<?php echo $text_days; ?>";
				<?php } else { ?>
				text.day        = "";
				<?php } ?>
				<?php if($countdown['hour']){ ?>
				text.hour       = "<?php echo $text_hour; ?>";
				<?php } else { ?>
				text.hour       = "";
				<?php } ?>
				<?php if($countdown['minute']){ ?>
				text.min        = "<?php echo $text_min; ?>";
				<?php } else { ?>
				text.min        = "";
				<?php } ?>
				<?php if($countdown['second']){ ?>
				text.sec        = "<?php echo $text_sec; ?>";
				<?php } else { ?>
				text.sec        = "";
				<?php } ?>
				</script>
				<?php } ?>


<!-- OC-Store: Badges -->
<script src="catalog/view/theme/ocstore/js/badges.js" type="text/javascript"></script>
<script src="catalog/view/theme/ocstore/js/badges_data.js" type="text/javascript"></script>
<script src="catalog/view/theme/ocstore/js/jquery.balloon.min.js" type="text/javascript"></script>
<!-- /OC-Store: Badges -->

</head>
<body class="<?php echo $class; ?>">
<nav id="top">
  <div class="container">
    <?php echo $currency; ?>
    <?php echo $language; ?>
    <div id="top-links" class="nav pull-right">
      <ul class="list-inline">
        <li><a href="<?php echo $contact; ?>"><i class="fa fa-phone"></i></a> <span class="hidden-xs hidden-sm hidden-md"><?php echo $telephone; ?></span></li>
        <li class="dropdown"><a href="<?php echo $account; ?>" title="<?php echo $text_account; ?>" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_account; ?></span> <span class="caret"></span></a>
          <ul class="dropdown-menu dropdown-menu-right">
            <?php if ($logged) { ?>
            <li><a href="<?php echo $account; ?>"><?php echo $text_account; ?></a></li>
            <li><a href="<?php echo $order; ?>"><?php echo $text_order; ?></a></li>
            <li><a href="<?php echo $transaction; ?>"><?php echo $text_transaction; ?></a></li>
            <li><a href="<?php echo $download; ?>"><?php echo $text_download; ?></a></li>
            <li><a href="<?php echo $logout; ?>"><?php echo $text_logout; ?></a></li>
            <?php } else { ?>
            <li><a href="<?php echo $register; ?>"><?php echo $text_register; ?></a></li>
            <li><a href="<?php echo $login; ?>"><?php echo $text_login; ?></a></li>
            <?php } ?>
          </ul>
        </li>
        <li><a href="<?php echo $wishlist; ?>" id="wishlist-total" title="<?php echo $text_wishlist; ?>"><i class="fa fa-heart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_wishlist; ?></span></a></li>
        <li><a href="<?php echo $shopping_cart; ?>" title="<?php echo $text_shopping_cart; ?>"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_shopping_cart; ?></span></a></li>
        <li><a href="<?php echo $checkout; ?>" title="<?php echo $text_checkout; ?>"><i class="fa fa-share"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_checkout; ?></span></a></li>
      </ul>
    </div>
  </div>
</nav>
<header>
  <div class="container">
    <div class="row">
      <div class="col-sm-4">
        <div id="logo">
          <?php if ($logo) { ?>
            <?php if ($home == isset($og_url)) { ?>
              <img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" class="img-responsive" />
            <?php } else { ?>
              <a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" class="img-responsive" /></a>
            <?php } ?>
          <?php } else { ?>
            <h1><a href="<?php echo $home; ?>"><?php echo $name; ?></a></h1>
          <?php } ?>
        </div>
      </div>
      <div class="col-sm-5"><?php echo $search; ?>
      </div>
      <div class="col-sm-3"><?php echo $cart; ?></div>
    </div>
  </div>
</header>
<?php if ($categories) { ?>
<div class="container">
  <nav id="menu" class="navbar">
    <div class="navbar-header"><span id="category" class="visible-xs"><?php echo $text_category; ?></span>
      <button type="button" class="btn btn-navbar navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"><i class="fa fa-bars"></i></button>
    </div>
    <div class="collapse navbar-collapse navbar-ex1-collapse">
      <ul class="nav navbar-nav">
        <?php foreach ($categories as $category) { ?>
        <?php if ($category['children']) { ?>
        <li class="dropdown"><a href="<?php echo $category['href']; ?>" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['name']; ?></a>
          <div class="dropdown-menu">
            <div class="dropdown-inner">
              <?php foreach (array_chunk($category['children'], ceil(count($category['children']) / $category['column'])) as $children) { ?>
              <ul class="list-unstyled">
                <?php foreach ($children as $child) { ?>
                <li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a></li>
                <?php } ?>
              </ul>
              <?php } ?>
            </div>
            <a href="<?php echo $category['href']; ?>" class="see-all"><?php echo $text_all; ?> <?php echo $category['name']; ?></a> </div>
        </li>
        <?php } else { ?>
        <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
        <?php } ?>
        <?php } ?>
      </ul>
    </div>
  </nav>
</div>
<?php } ?>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Замените это:

<?php if ($og_image) { ?>

на это:

<?php if (isset($og_image) && !empty($og_image)) { ?>

 

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоже помогло, только еще похожий код вылез на месте логотипа, но полного адреса не видно , видно только что 84 строка  так  такой код

  <?php if ($home == $og_url) { ?>

заменил по аналогии , сайт вообще не грузится ) тему сменил вроде не появляется .. но мало ли .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, l1key сказал:

заменил по аналогии , сайт вообще не грузится )

 

Не знаю, что у вас получилось, но должно было быть так:

 

<?php if (isset($home) && isset($og_url) && $home == $og_url) { ?>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет всем.

Не хочу плодить темы, спрошу тут.

Установил ОС в подпапку:

site.com/ocstore

Хотел в шаблоне стандартную проверку сделать

<?php if ($home == $og_url) { ?>

а не тут-то было.

var_dump($home, $og_url);

на главной странице говорит:

Цитата

string(29) "http://site.com/ocstore/" string(37) "http://site.com/ocstore/ocstore/"

 

не подскажете, где косячек закрался?

Изменено пользователем Raensul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Raensul, как формируется содержимое $og_url?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dotrox,

$data['og_url'] = (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1')) ? HTTPS_SERVER : HTTP_SERVER) . substr($this->request->server['REQUEST_URI'], 1, (strlen($this->request->server['REQUEST_URI'])-1));

просто сдвинуть не на 1, а на 9?

Изменено пользователем Raensul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
32 минуты назад, Raensul сказал:

просто сдвинуть не на 1, а на 9?

Просто оторвать руки тому, кто это писал.

По нормальному, ссылка должна формироваться в контроллерах страницы через $this->url->link() и передаваться в шапку через дополнительный метод в document (по аналогии с тем, как тайтл, например. устанавливается).

 

Но, если хотите простой вариант, то хотя бы так:

$data['og_url'] = $server . ltrim(str_replace('ocstore', '', $this->request->server['REQUEST_URI']), '/')

$server - уже устанавливается в начале метода index после проверки текущего протокола (а потому нет необходимости проверять ещё раз и тем более подставлять ссылку прямо из конфига).

ocstore - название вашей директории.

Лишние слеши в начале удаляются через ltrim.

 

Хотя этот вариант менее дырявый, чем оригинал, но тут остаётся недостаток в виде возможности попадания в ссылку различного мусора, например utm меток.

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну это стандартная строка из движка, т.е. руки отрывать даниэлю и приспешникам :)

 

спасибо :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, Raensul сказал:

ну это стандартная строка из движка

Если б была стандартная, я б не спрашивал, как og_url формируется.

 

После того, как вы сказали, что стандартная, я проверил ocStore и таки да, оно добавлено там. ocStore резко упал в моих глазах.

 

При чём, og_image то там нормально через document выставляется. А og_url смахивает на какой-то сознательны саботаж.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нет под рукой чистого ОС - в нем то же самое, или там нормально?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
23 минуты назад, Raensul сказал:

нет под рукой чистого ОС - в нем то же самое, или там нормально?

В оригинальном ОК нет og_url, потому я и спрашивал.

И он всегда под рукой: https://github.com/opencart/opencart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

3 часа назад, Dotrox сказал:

При чём, og_image то там нормально через document выставляется. А og_url смахивает на какой-то сознательны саботаж.

 

в Document для og_image есть сеттер.

для og_url его нет же смысла писать? только геттер?

и в нем вернуть Ваше:

$server . ltrim(str_replace('ocstore', '', $this->request->server['REQUEST_URI']), '/')

?

я пока не могу понять, как там получить линк текущей страницы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, Raensul сказал:

для og_url его нет же смысла писать? только геттер?

 

1 минуту назад, Raensul сказал:

я пока не могу понять, как там получить линк текущей страницы...

Вот потому и не можете понять :)

Надо делать полностью по аналогии с og_image (и сеттер и геттер) и тогда моё решение вообще не нужно. А иначе нет смысла трогать Document - он нужен только для того, чтоб можно было из контроллера страницы в контроллер шапки передать какую-то информацию.

 

То есть, правильное решение: добавляем в Document и сеттер и геттер и устанавливаем в контроллерах страниц (товар, категория и т.д.) ссылку через сеттер документа, а формируем ссылку для него через $this->url->link(). А затем в контроллере шапки получаем геттером установленную ссылку и передаём в $data['og_url'].

 

Либо неправильное решение (но простое и быстрое): вообще не трогаем ни Document, ни контроллеры страниц, а просто используем код, который я привёл несколькими сообщениями ранее.

 

Но только что-то одно из этих двух вариантов. Не надо пытаться их смешивать!

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

4 часа назад, Dotrox сказал:

Хотя этот вариант менее дырявый, чем оригинал, но тут остаётся недостаток в виде возможности попадания в ссылку различного мусора, например utm меток.

 

в моем случае если написать 

$data['og_url'] = $server . substr($this->request->server['REQUEST_URI'], 9, (strlen($this->request->server['REQUEST_URI'])-1));

то проблемы с мусором вроде не должно быть, но все равно это же костыль...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Raensul сказал:

в моем случае если написать 


$data['og_url'] = $server . substr($this->request->server['REQUEST_URI'], 9, (strlen($this->request->server['REQUEST_URI'])-1));

то проблемы с мусором вроде не должно быть, но все равно это же костыль...

А чем вам мой вариант не нравится?

Использование substr - это очень плохая идея, ибо он вслепую режет строку. Например, если вы захотите перенести сайт в корень домена, substr начнёт обрезать начальный кусок ссылки на страницу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, Dotrox сказал:

А чем вам мой вариант не нравится?

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

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

 

9 минут назад, Dotrox сказал:

То есть, правильное решение: добавляем в Document и сеттер и геттер и устанавливаем в контроллерах страниц (товар, категория и т.д.) ссылку через сеттер документа, а формируем ссылку для него через $this->url->link(). А затем в контроллере шапки получаем геттером установленную ссылку и передаём в $data['og_url'].

вот потому наверное и написали ересь - строчка кода и вроде работает, а иначе нужно перелопатить тучу контроллеров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, Raensul сказал:

вот потому наверное и написали ересь - строчка кода и вроде работает, а иначе нужно перелопатить тучу контроллеров.

Тем не менее, для og_image это всё же сделали правильно. Правда, там оно добавлено пулл реквестом.

Но главное не это! Устанавливать ссылку через Document формируя в контроллерах через $this->url->link() или же выдирать из REQUEST_URI - это вопрос наполовину религиозный. Но вот обрезать слеш вначале ссылки через substr - это индикатор человека, который месяц назад познакомился с php (и до этого вообще программированием не занимался).

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

То есть, если оценивать оригинальный код целиком, то его писал либо ребёнок (если не по возрасту, то по уровню интеллекта), либо кто-то сознательно подлил дерьма в код ocStore.

 

9 минут назад, Raensul сказал:

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

а мой способ сработает вроде без этой проблемы

А вы можете описать те отличия из-за которых в моём варианте должны возникнуть проблемы, а в вашем их не будет? :)

При условии, что у вас нет тегов (а также товаров или категорий) с названием ocstore, результат работы обоих вариантов будет одинаков. А разница почувствуется, когда длина REQUEST_URI хотя бы на символ изменится в пределах тех символов, которые должны обрезаться. Например, в начале не окажется слеша или там окажется лишний слеш, или сайт переедет в корень домена - substr будет либо оставлять лишнее, либо обрезать нужное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Og tags - ето надо делат по  документацию и не пользоват в основном коде. Еще и Гугл их читает.

Для лого лучше проверят $class = 'home'.

Вот мой модуль для ог теги:

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=22963

там еще - картинки по размерам и все что нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, Dotrox сказал:

А вы можете описать те отличия из-за которых в моём варианте должны возникнуть проблемы, а в вашем их не будет? :)

неа, не могу :)

спасибо большое, все разжевали.

реализовывать я это вряд ли буду, но буду знать, что оно есть :) обойдусь Вашим коротким вариантом :)

 

з.ы. а может тут на сервере админам стоит это сообщить?

Изменено пользователем Raensul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dotrox, все же мне энта мысль не дает покоя.

например в контроллере продукта можно:

$this->document->setOgUrl($this->url->link('product/product', 'product_id=' . $product_id));

а в контроллере хидера:

$data['og_url'] = $this->document->getOgUrl();

Это имели ввиду?

 

для категории

$this->document->setOgUrl($this->url->link('product/category', 'path=' . $path . $url));

для главной в home.php

$this->document->setOgUrl($this->url->link('common/home'));

В принципе работает, но я не знаю, в каких контроллерах еще нужно установить, чтобы ничего не пропустить

Изменено пользователем Raensul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Raensul сказал:

Это имели ввиду?

Именно это.

 

1 час назад, Raensul сказал:

в каких контроллерах еще нужно установить, чтобы ничего не пропустить

В идеале - во всех контроллерах страниц. Минимум - главная, товар, категория, страница бренда, инфо страница.

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dotrox, Благодарствую!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прошу прощения, но не скажете, если ставить окстор в подпапку - гемор будет везде подстерегать?

в common.js где аяксом удаляется товар в корзине кусок:

if ((now_location == '/cart/') || (now_location == '/checkout/') || (getURLVar('route') == 'checkout/cart') || (getURLVar('route') == 'checkout/checkout')) {

не очень-то работает, пока не сделаю

if ((now_location == '/ocstore/cart/') || (now_location == '/checkout/') || (getURLVar('route') == 'checkout/cart') || (getURLVar('route') == 'checkout/checkout')) {

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.