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

[Решено] Можно ли находясь в отличном от header.php "модуле", добавить meta в <head>?

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

Почему нужен такой заплёт, дело в том что для robots.txt файла(а точнее мета <meta name="robots" content="noindex">) должен добавляться выборочно в отмеченные для этого категории, и я не могу сделать в header.php запрет, так как не знаю в какой категории будет находится пользователь.

 

Задача в нужные категории добавить в шапку 

<meta name="robots" content="noindex">

в контроллере у меня уже определяются такие категории, и в шаблоне тоже, но черт побери а как это залепить в <head>? если шаблон(category.tpl) начинается 

<?php echo $header; ?>
...................

??????

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


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

Конечно можно

system\library\document.php

    private $metas = array();
    public function addMeta($name, $content) {
        $this->metas[md5($name)] = array(
            'name'  => $name,
            'content'   => $content,
        );
    }
$this->document->addMeta('robots', 'noindex');
<?php foreach ($metas as $meta) { ?>
<meta name="<?php echo $meta['name']; ?>" content="<?php echo $meta['content']; ?>" />
<?php } ?>

Если нигде не ошибся... должно заработать

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


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

спасиб за ответ, я совсем забыл что можно заюзать 

$('head').prepend('<meta name="robots" content="noindex">')

:) тогда когда if выполняет условия в category.tpl.

$this->document->addMeta('robots', 'noindex');

<?php foreach ($metas as $meta) { ?>
<meta name="<?php echo $meta['name']; ?>" content="<?php echo $meta['content']; ?>" />
<?php } ?>

первое понял что в саму document.php а остальное?:) foreach в header.tpl, а вызов ->addMeta делать в контроллере category.php? 

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


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

1.

('head').prepend('<meta name="robots" content="noindex">')

 

можно, а смысл?

 

грубо... ПС не отрабатывает js

 

2. Скажу по секрету

ПС метатеги читает везде и в body конечно же ....

Если не верите, то посмотрите  рекомендации schema

 

3

 

первое понял что в саму document.php а остальное? :) foreach в header.tpl, а вызов ->addMeta делать в контроллере category.php?

Да.

Красиво, понятно, правильно

Заодно расширите функционал, и возможно будете  добавлять тогда любые теги

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


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

ок сделаем так как надо знач :)

 

собственно шаблон header.tpl не знает что такое $metas, так как в контроллере header.php этого нету.

<?php foreach ($metas as $meta) { ?>
<meta name="<?php echo $meta['name']; ?>" content="<?php echo $meta['content']; ?>" />
<?php } ?>

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


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

ах да

в контроллере header

$this->data['metas'] = $this->document->getMetas();   

Еще и метод дописать в document

    public function getMetas() {
        return $this->metas;
    }
  

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


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

работает на ура! спасибо! :) не понятно почему не ставиться лайк тебе( или из-за того что мог недавно ставить уже, еще раз спасибо! :) +++++

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


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

Окончательный вариант решения
system\library\document.php

    private $metas = array();
    public function addMeta($name, $content) {
        $this->metas[md5($name)] = array(
            'name'  => $name,
            'content'   => $content,
        );
    }
    public function getMetas() {
        return $this->metas;
    }

В контроллерах, а так же в методах контроллеров, которые подключают свои шаблоны, где требуется добавить теги:
 

$this->document->addMeta('robots', 'noindex');

В контроллере header.php

$this->data['metas'] = $this->document->getMetas();

В header.tpl

<?php foreach ($metas as $meta) { ?>
<meta name="<?php echo $meta['name']; ?>" content="<?php echo $meta['content']; ?>" />
<?php } ?>
Изменено пользователем chukcha

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


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

chukcha
Спасибо! Все получилось. Вот только, не появляется этот тег на странице возврата товара. Добавляю у файл: catalog/controller/account/return.php, но ничего не получается. Не подскажите, где его добавить?
 

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


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

Как добавляете?

 

и где

 

return доступна после регистрации - для ПС эта страница недоступна - и смысла в добавлении тега нет.

 

Для незарегистрированных происходит редирект на account/login

поэтому тег нужно добавлять в контроллер login

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


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

Вот на эти 2 страницы, не получается добавить:

index.php?route=account/return/insert

index.php?route=product/special

 

Они обе доступны, без регистрации. 

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


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

так

 

$this->document->addMeta('robots', 'noindex');

Нужно делать в методе insert

 

index.php?route=account/return/insert

 

 

Показывайте как вы это делаете...

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


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

так

 

$this->document->addMeta('robots', 'noindex');

Нужно делать в методе insert

 

Спасибо большое, за подсказку - помогло.

 

PS. К сожалению, + не могу поставить, так как нет такой возможности у меня.

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


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

Не понял задачи, извините. Для чего вставлять тег - не индексировать, если в роботс все указывается? Поделитесь плз инфой.

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


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

То, что указывается в роботс, все равно индексируется некоторыми сканерами, в частности Googlebot. Возможно, даже появится в результатах поиска. Правила из этого файла воспринимаются им как рекомендации. А конструкция <meta name="robots" content="noindex"> для ботов работает как "кирпич" для транспорта.

 

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

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


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

А может хто более красивее решение набросать для определенных ИД категорий?

Сейчас у себя в контроллере сделал банальное

if ($category_info['category_id'] == 111) {
$this->document->addMeta('robots', 'noindex,nofollow');
}
Таких категорий у меня около 10 и мозгов хватает только на одно длинное условие типа "или" "или" "или" и т.д.

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


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

in_array

if (in_array($category_info['category_id'], array(111,112,124)) {

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


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

Отлично, работает, только там третьей закрывающей скобки не хватает.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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