Форум русской поддержки Joomla!® CMS
04.12.2016, 22:28:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Убираем пустые поля в head

 (Прочитано 543 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aiden
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 117



« : 12.03.2016, 09:55:14 »

Конкретно, как можно убрать пустые meta robots, keywords и description

Нашел статью, но по ней ничего толкового не вышло.

Кто нибудь может написать грамотное решение что бы поля robots, keywords и description выводились только если заполнены. Тем более в J 2.5 это есть по дефолту, функционал всё таки полезный.

« Последнее редактирование: 12.03.2016, 16:34:42 от Aiden » Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #1 : 12.03.2016, 22:58:27 »

Так сделайте миграцию на 3* версию и голову ломать не надо будет.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1444


« Ответ #2 : 12.03.2016, 23:03:13 »

Попробуйте следующее:

Код:
$doc = JFactory::getDocument();

if(isset($doc->_metaTags['standard']['robots']) && empty($doc->_metaTags['standard']['robots']))
{
    unset($doc->_metaTags['standard']['robots']);
}
Записан
Aiden
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 117



« Ответ #3 : 12.03.2016, 23:33:02 »

flyingspook из за метатегов менять родненькую 1.5 на 3? Нет уж.

Филипп Сорокин

Если добавить в index.php шаблона то robots выводится в обычном режиме.

Ладно, не буду мучить т.к. там наверное не 1 файл нужно редактировать, а я даже не понял из вашего поста для какого файла ваш вариант.Попробую закинуть тз в коммерческий раздел.
Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #4 : 13.03.2016, 14:49:36 »

Если сайт будет развиваться то его обновлять, если нет, то хакать по ядру можно или для такого рода задач можно плагины писать.
как выше написали можно в шаблоне писать
если хакать то файл отвечает за это в 1.5
libraries\joomla\document\html\renderer\head.php
пишите на каждый вывод условие на - если не пусто или не равно пусто
вариантов массы как их удалить из кода
Записан
AGusar
Осваиваюсь на форуме
***

Репутация: +1/-1
Offline Offline

Пол: Женский
Сообщений: 26



« Ответ #5 : 15.03.2016, 13:45:05 »

Уберите из текущего шаблона сайта код, который выводит тег title. Для этого нужно открыть файл templates/папка_текущего_шаблона/index.php и закомментировать строчку < title>< ?php echo $mosConfig_sitename; ?></title> или совсем удалите.
Исправьте код файла /includes/frontend.php для discription.

//$mainframe->appendMetaTag( 'description', $mosConfig_MetaDesc );
//$mainframe->appendMetaTag( 'keywords', $mosConfig_MetaKeys );
$description = '';
$keywords = '';
 
$_meta_keys_index = -1;
$_meta_desc_index = -1;
 
$n = count( $mainframe->_head['meta'] );
for ($i = 0; $i < $n; $i++) {
  if ($mainframe->_head['meta'][$i][0] == 'keywords') {
    $_meta_keys_index = $i;
    $keywords = $mainframe->_head['meta'][$i][1];               
  } else if ($mainframe->_head['meta'][$i][0] == 'description') {
    $_meta_desc_index = $i;
    $description = $mainframe->_head['meta'][$i][1];               
  }
}
 
if (!$description) {
  $mainframe->appendMetaTag( 'description', $mosConfig_MetaDesc );
}
 
if (!$keywords) {
  $mainframe->appendMetaTag( 'keywords', $mosConfig_MetaKeys );
}   

Что касается keywords. Установите iJoomla Metatag Generator и настройте его.
Записан
Aiden
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 117



« Ответ #6 : 16.03.2016, 13:35:16 »

AGusar к чему совет про title?

Решил всё таки добить тему. Практически нашел нужное решение, осталось совсем чуть, всё делается в файле

Код:
libraries/joomla/document/html/renderer/head.php

Оригинал:

Показать текстовый блок


Новый вариант:


Показать текстовый блок

После этого description появляется только если поле заполнено, что хорошо, а вот keywords и robots не появляются если поля заполнены. Keywords всё равно не использую, а вот почему не появляется meta robots??

Смысл в том, что бы дефолтные index, follow не выводились, а только то, что прописывается вручную в материале, например прописали в материале noindex - он и появился
« Последнее редактирование: 16.03.2016, 13:55:05 от Aiden » Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #7 : 16.03.2016, 15:28:34 »

Вам в файле libraries\joomla\document\html\html.php надо за комментировать просто строку
Код
$this->setMetaData('robots', 'index, follow' );
и ни чего своего не писать для robots ни где
Записан
Aiden
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 117



« Ответ #8 : 16.03.2016, 17:09:56 »

В файле libraries\joomla\document\html\html.php закомментировал  строку
Код
$this->setMetaData('robots', 'index, follow' );

В head.php код вывода такой

Показать текстовый блок

Хорошо, что
Robots выводится только если заполнено поле
Description выводится только если заполнено поле
но плохо что пустой
Keywords выводится

Код
<meta name="keywords" content="" />


Блин  dry


В принципе он вообще не нужен, осталось его отключить, пока не получается т.к. не могу понять откуда вообще берется: ни в document.php ни в HTML.php ни в head.php ничего похожего на keywords нету
« Последнее редактирование: 16.03.2016, 19:52:54 от Aiden » Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #9 : 16.03.2016, 21:08:44 »

keywords формируют расширения его убирать надо на уровне шаблона или плагин писать
Записан
Aiden
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 117



« Ответ #10 : 16.03.2016, 23:15:04 »

Может быть кому нибудь пригодится:

По умолчанию Joomla 1.5 выводит meta даже если они не заполнены:

Код:
<meta name="robots" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="generator" content="Joomla! 1.5 - Open Source Content Management" />

После изменений:
Код:
<meta name="robots" content="blabla" /> выводится только если заполнен в материале или SEF
<meta name="keywords" content="" /> не выводится
<meta name="description" content="blabla" /> выводится только если заполнен в материале или SEF
<meta name="generator" content="Joomla! 1.5 - Open Source Content Management" /> не выводится

1. В файле libraries\joomla\document\html\html.php


Код
$this->setMetaData('robots', 'index, follow' );

меняем на

Код
// $this->setMetaData('robots', 'index, follow' );

2. В файле libraries\joomla\document\html\renderer\head.php

меняем

Код
foreach ($document->_metaTags as $type => $tag)
{
foreach ($tag as $name => $content)
{
if ($type == 'http-equiv') {
$strHtml .= $tab.'<meta http-equiv="'.$name.'" content="'.$content.'"'.$tagEnd.$lnEnd;
} elseif ($type == 'standard') {
$strHtml .= $tab.'<meta name="'.$name.'" content="'.str_replace('"',"'",$content).'"'.$tagEnd.$lnEnd;
}
}
}
 
$strHtml .= $tab.'<meta name="description" content="'.$document->getDescription().'" />'.$lnEnd;
$strHtml .= $tab.'<meta name="generator" content="'.$document->getGenerator().'" />'.$lnEnd;
 
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;
 

на

Код
foreach ($document->_metaTags as $type => $tag)
       {
        foreach ($tag as $name => $content)
        {
           if ($type == 'http-equiv') {
              $strHtml .= $tab.'<meta http-equiv="'.$name.'" content="'.$content.'"'.$tagEnd.$lnEnd;
           } elseif ($type == 'standard') {
                                       if ($name != 'keywords') {
                     $strHtml .= $tab.'<meta name="'.$name.'" content="'.str_replace('"',"'",$content).'"'.$tagEnd.$lnEnd;
                                       }
                            }
                 }
       }
 
 
$documentDescription = $document->getDescription();
if ($documentDescription) {
$strHtml .= $tab.'<meta name="description" content="'.$document->getDescription().'" />'.$lnEnd;
 
 
}
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;
 
 
 

Работоспособность проверил на 1.5.26

Всем спасибо!
Записан
flyingspook
Профи
********

Репутация: +226/-9
Offline Offline

Сообщений: 3525


« Ответ #11 : 17.03.2016, 09:34:31 »

Не за что.  Smiley
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet