Jump to content
Sign in to follow this  
cha0s

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

Recommended Posts

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

 

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

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

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

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

??????

Share this post


Link to post
Share on other sites

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

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 } ?>

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

Share this post


Link to post
Share on other sites

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

$('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? 

Share this post


Link to post
Share on other sites

1.

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

 

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

 

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

 

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

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

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

 

3

 

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

Да.

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

ах да

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Окончательный вариант решения
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 } ?>
Edited by chukcha

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

и где

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

index.php?route=account/return/insert

index.php?route=product/special

 

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

Share this post


Link to post
Share on other sites

так

 

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

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

 

index.php?route=account/return/insert

 

 

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

Share this post


Link to post
Share on other sites

так

 

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

in_array

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.