Sign in to follow this  
yakovjik

Как убрать пустой h1 в шаблоне битрикса?

Recommended Posts

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

Share this post


Link to post
Share on other sites

Для того есть отложенные функции: http://dev.1c-bitrix.ru/api_help/main/general/technology/suspended_functions.php

Вот только беда в том, что эти функции ничего не возвращают, а только выводят в поток.

Мне в своё время удалось такую задачу решить только при помощи глобальной переменной.

Либо, как вариант, можно буферизацию использовать.

Иных способов вывести значение раньше, чем оно задано, не вижу.

Share this post


Link to post
Share on other sites

ради интереса попробовал повозюкаться с шаблоном битрикса на эту тему, получилось фифти\фифти:


<div id="workarea">
<?
if($APPLICATION->ShowTitle(false)) {
echo '<h1 id="pagetitle">
$APPLICATION->ShowTitle(false)
$APPLICATION->ShowProperty("ADDITIONAL_TITLE", "")
</h1>'; }
?>
#WORK_AREA#<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
IncludeTemplateLangFile(__FILE__);
?>
</div>

h1 зараза теперь вообще не выводит.

Share this post


Link to post
Share on other sites

rus, а потому что неправильно.

У этого метода несколько неожиданное поведение: он не возвращает никакого результата.

И потому if($APPLICATION->ShowTitle(false)) не имеет никакого смысла. С таким же успехом можно написать if(false).

Тут суть вот в чём:

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

Как вывести раньше то, что определено позже? Правильно, буферизация в помощь.

Метод SetTitle() устанавливает заголовок. Затем обрабатывается буфер, и в то место, где встречается вызов ShowTitle(), подставляется значение, установленное SetTitle(). То есть, проверять установленность заголовка этой функциоей нельзя. Она не для того.

Есть ещё GetTitle() — с его помощью можно проверять. Но в данном случае тоже неприемлемо, ибо заголовок ещё не задан.

Вообще, не до конца понимаю, почему отложенные функции работают именно так, а не иначе. В этом определённое неудобство есть для разработки.

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


<?
global $my_title;
$my_title = false;

function myShowTitle($t="title"){
global $APPLICATION;
echo $APPLICATION->AddBufferContent("myGetTitle");
}

function mySetTitle($t){
global $my_title;
if(strlen(trim($t))>0) {
$my_title = "<h1>".$t."</h1>";
} else {
$my_title = $t;
}
}

function myGetTitle(){
global $my_title;
if($my_title === false) {
global $APPLICATION;
$my_title = "<h1>".$APPLICATION->GetTitle()."</h1>";
}
return $my_title;
}


$this->IncludeComponentTemplate();
?>

Чую, что криво. Но работает исправно.

Если кто обругает мой вариант и предложит более правильный — заранее спасибо.

Share this post


Link to post
Share on other sites

И мне понадобилось убрать пустые теги, если не задан заголовок.
Вот нашёл тему - https://dev.1c-bitrix.ru/support/forum/forum6/topic72981/
Т.е. вставляем код в \bitrix\php_interface\init.php :

// функция убирает пустые теги H1, если заголовок пустой
function custom_page_filter(&$content) {
$content = str_replace('<h1></h1>', '', $content); 
} 
AddEventHandler('main', 'OnEndBufferContent', 'custom_page_filter'); 

Всё, больше ничего не требуется, всё работает.

Share this post


Link to post
Share on other sites
В 27.04.2011 в 00:37, yakovjik сказал:

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

как убрать пустой h1...первый h1 пустой, второй с заголовком в статье оформленный h1 http://prntscr.com/h2zm6g /

Как убрать первый пустой?

Share this post


Link to post
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
Sign in to follow this  

  • Member Statistics

    46,379
    Total Members
    3,128
    Most Online
    Petronne
    Newest Member
    Petronne
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.