Дата последнего изменения: 03.11.2023
Предполагается, что сайт предназначен прежде всего для общения единомышленников. В качестве основной формы такого общения выбран блог – сетевой журнал. К настройкам самих блогов мы еще вернемся. А пока нам нужно внедрить в шаблон компонент Новые сообщения блога. С его помощью будут выводиться на всех страницах тестового шаблона новые сообщения в блогах.
<!-- #Begin_blog --> <!-- #End_blog -->
Перед настройкой компонента необходимо проверить настройки (и, при необходимости изменить) групп блогов и блога администратора, на который мы будем настраивать компонент.
Перейдя в публичку, вы увидите, что блоги появились:
/blog/group/#group_id#/post/#post_id#/
В исходном варианте дизайна в качестве новых сообщений выводится только текст. Без авторства и даты, но с аватаром. Задумка красивая, но есть одно «Но». Эта идея с аватарами накладывает ограничения на их размер, что не совсем удобно. Это – мелочи, в общем-то, можно потерпеть мелкие аватары в самих блогах. Серьезнее другое: для реализации этого варианта нам придется модифицировать код самого компонента. Это выходит за рамки примера. Потому отойдем от дизайна и вместо аватара выведем картинку с блога с параметрами, заданными в исходном шаблоне.
Значит нам нужно:
Займемся этими изменениями.
<div class="blog-author"> <?if($arParams["SEO_USER"] == "Y"):?> <noindex> <a class="blog-author-icon" href="<?=$arPost["urlToAuthor"]?> title="<?=GetMessage("BLOG_BLOG_M_TITLE_BLOG")?>" rel="nofollow"></a> </noindex> <?else:?> <a class="blog-author-icon" href="<?=$arPost["urlToAuthor"]?>" title="<?=GetMessage("BLOG_BLOG_M_TITLE_BLOG")?>"></a> <?endif;?> <? if (COption::GetOptionString("blog", "allow_alias", "Y") == "Y" && (strlen($arPost["urlToBlog"]) > 0 || strlen($arPost["urlToAuthor"]) > 0) && array_key_exists("BLOG_USER_ALIAS", $arPost) && strlen($arPost["BLOG_USER_ALIAS"]) > 0) $arTmpUser = array( "NAME" => "", "LAST_NAME" => "", "SECOND_NAME" => "", "LOGIN" => "", "NAME_LIST_FORMATTED" => $arPost["~BLOG_USER_ALIAS"], ); elseif (strlen($arPost["urlToBlog"]) > 0 || strlen($arPost["urlToAuthor"]) > 0) $arTmpUser = array( "NAME" => $arPost["~AUTHOR_NAME"], "LAST_NAME" => $arPost["~AUTHOR_LAST_NAME"], "SECOND_NAME" => $arPost["~AUTHOR_SECOND_NAME"], "LOGIN" => $arPost["~AUTHOR_LOGIN"], "NAME_LIST_FORMATTED" => "", ); ?> <? $GLOBALS["APPLICATION"]->IncludeComponent("bitrix:main.user.link", '', array( "ID" => $arPost["AUTHOR_ID"], "HTML_ID" => "blog_new_posts_".$arPost["AUTHOR_ID"], "NAME" => $arTmpUser["NAME"], "LAST_NAME" => $arTmpUser["LAST_NAME"], "SECOND_NAME" => $arTmpUser["SECOND_NAME"], "LOGIN" => $arTmpUser["LOGIN"], "NAME_LIST_FORMATTED" => $arTmpUser["NAME_LIST_FORMATTED"], "USE_THUMBNAIL_LIST" => "N", "PROFILE_URL" => $arPost["urlToAuthor"], "PROFILE_URL_LIST" => $arPost["urlToBlog"], "PATH_TO_SONET_MESSAGES_CHAT" => $arParams["~PATH_TO_MESSAGES_CHAT"], "PATH_TO_VIDEO_CALL" => $arParams["~PATH_TO_VIDEO_CALL"], "DATE_TIME_FORMAT" => $arParams["DATE_TIME_FORMAT"], "SHOW_YEAR" => $arParams["SHOW_YEAR"], "CACHE_TYPE" => $arParams["CACHE_TYPE"], "CACHE_TIME" => $arParams["CACHE_TIME"], "NAME_TEMPLATE" => $arParams["NAME_TEMPLATE"], "SHOW_LOGIN" => $arParams["SHOW_LOGIN"], "PATH_TO_CONPANY_DEPARTMENT" => $arParams["~PATH_TO_CONPANY_DEPARTMENT"], "PATH_TO_SONET_USER_PROFILE" => ($arParams["USE_SOCNET"] == "Y" ? $arParams["~PATH_TO_USER"] : $arParams["~PATH_TO_SONET_USER_PROFILE"]), "INLINE" => "Y", "SEO_USER" => $arParams["SEO_USER"], ), false, array("HIDE_ICONS" => "Y") ); ?> </div>
Этим мы удалили картинку по умолчанию, имя владельца блога, выводимое через компонент.
<div class="blog-mainpage-meta"> <a href="<?=$arPost["urlToPost"]?> " title="<?=GetMessage("BLOG_BLOG_M_DATE")?>"><?=$arPost["DATE_PUBLISH_FORMATED"]?></a> <?if(IntVal($arPost["VIEWS"]) > 0):?> <span class="blog-vert-separator"></span> <a href="<?=$arPost["urlToPost"]?>" title="<?=GetMessage("BLOG_BLOG_M_VIEWS")?>"><?=GetMessage("BLOG_BLOG_M_VIEWS")?>: <?=$arPost["VIEWS"]?></a> <?endif;?> <?if(IntVal($arPost["NUM_COMMENTS"]) > 0):?> <span class="blog-vert-separator"></span> <a href="<?=$arPost["urlToPost"]?>#comments" title="<?=GetMessage("BLOG_BLOG_M_NUM_COMMENTS")?>"> <?=GetMessage("BLOG_BLOG_M_NUM_COMMENTS")?>: <?=$arPost["NUM_COMMENTS"]?></a> <?endif;?> <?if ($arParams["SHOW_RATING"] == "Y"):?> <span class="rating_vote_text"> <span class="blog-vert-separator"></span> <? $APPLICATION->IncludeComponent( "bitrix:rating.vote", $arParams["RATING_TYPE"], Array( "ENTITY_TYPE_ID" => "BLOG_POST", "ENTITY_ID" => $arPost["ID"], "OWNER_ID" => $arPost["AUTHOR_ID"], "USER_VOTE" => $arResult[0]["RATING"][$arPost["ID"]]["USER_VOTE"], "USER_HAS_VOTED" => $arResult[0]["RATING"][$arPost["ID"]]["USER_HAS_VOTED"], "TOTAL_VOTES" => $arResult[0]["RATING"][$arPost["ID"]]["TOTAL_VOTES"], "TOTAL_POSITIVE_VOTES" => $arResult[0]["RATING"][$arPost["ID"]]["TOTAL_POSITIVE_VOTES"], "TOTAL_NEGATIVE_VOTES" => $arResult[0]["RATING"][$arPost["ID"]]["TOTAL_NEGATIVE_VOTES"], "TOTAL_VALUE" => $arResult[0]["RATING"][$arPost["ID"]]["TOTAL_VALUE"], "PATH_TO_USER_PROFILE" => $arParams["~PATH_TO_USER"], ), $component, array("HIDE_ICONS" => "Y") );?> </span> <?endif;?> </div>
Этим мы удалили вывод даты сообщения, комментариев и компонент рейтинга.
<div class="blog-mainpage-title"><a href="<?=$arPost["urlToPost"]?>"><?echo $arPost["TITLE"]; ?></a></div>
Этим мы удалили название сообщения (правда, одновременно со ссылкой на само сообщение и её нам ещё предстоит вернуть).
if($arPost["FIRST"]!="Y") { ?><div class="blog-line"></div><? }
</div>
с классами blog-mainpage-item
и blog-clear-float
. Они нам не нужны, так как форматирование в исходном дизайне задаётся таблицей.Из шаблона компонента удалено всё не нужное, но теперь надо привести вид в соответствие с задумками дизайнера.
<? if(strlen($arPost["IMG"]) > 0) echo $arPost["IMG"]; ?>Перед вызовом текста сообщения (
<?=$arPost["TEXT_FORMATED"]?>
)
Этим мы обеспечили вывод картинки из сообщения блога. (Если в сообщении нет картинки, то выводиться ничего не будет.) Теперь добавим код из исходного дизайна.
<table width="99%" border="0" cellspacing="3" cellpadding="5"> <tr> <td class="br" bgcolor="#DEDEE2" bordercolor="#bfbfbf">Перед блоком
<div class="blog-mainpage-content">
</div>
Теперь нам нужно добавить картинку перехода к сообщению и установить ссылку на сообщение на эту картинку. Ссылка на сообщение у нас в исходном шаблоне была в таком виде:
<div class="blog-mainpage-title"><a href="<?=$arPost["urlToPost"]?>"><?echo $arPost["TITLE"]; ?></a></div>
Если из этого кода удалить код блока и вызов названия, то получим только ссылку:
<a href="<?=$arPost["urlToPost"]?>"></a>
<?=$arPost["TEXT_FORMATED"]?>
)<img width="20" height="20" border="0" align="right" src="/bitrix/templates/test/images/ukaz_inf.jpg" />
) и вставьте его в код ссылки.Теперь переход к сообщению у нас происходит с картинки. Однако пока ещё отображение текста не соответствует нужному.
В коде шаблона есть указание на расположение файлов стилей:
<? if (!$this->__component->__parent || empty($this->__component->__parent->__name) || $this->__component->__parent->__name != "bitrix:blog"): $GLOBALS['APPLICATION']->SetAdditionalCSS('/bitrix/components/bitrix/blog/templates/.default/style.css'); $GLOBALS['APPLICATION']->SetAdditionalCSS('/bitrix/components/bitrix/blog/templates/.default/themes/blue/style.css'); endif; ?>
Можно отредактировать эти файлы, а можно добавить свой файл CSS в папке C:\www\bitrix\templates\test\components\bitrix\blog.new_posts\template1\
, что мы и сделаем.
.blog-mainpage-content { font-size:80%; text-decoration:none; }
Результат работы практически полностью соответствует исходному дизайну:
Кроме того, необходимо предусмотреть ситуацию, когда в блоге не загружена картинка. Это можно сделать в самом шаблоне компонента.