Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Заглушка для картинки

00 голосов
5
Добрый день!
Есть шаблон "catalog.section.list" который (в моем случае) выводит названия разделов с картинками к ним.
Если нет картинки, то ничего не показывает, а хотелось бы что бы показывал мою картинку с надписью типа:
"Not images".
Пытался заменить следующий код:
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="catalog-section-list" style="margin:0 auto; width:800px;">
<div>
<?
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1;
foreach($arResult["SECTIONS"] as $arSection):
   if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"])
      echo "<ul>";
   elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"])
      echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]);
   $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
?>
</div>
<div style="width:350px; float:left; margin:0 20px; border:#CCCCCC solid 1px;">
<img style="vertical-align:middle;" border="0" src="<?=$arSection["PICTURE"]["SRC"]?>" width="100" height="100" title="<?=$arSection["NAME"]?>" />
<?=$arSection["DESCRIPTION"]?>
<a style="vertical-align:middle;" href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?>&nbsp;(<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a>
<?endforeach?>
</div>
</div>

На свой:
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="catalog-section-list" style="margin:0 auto; width:800px;">
<div>
<?
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1;
foreach($arResult["SECTIONS"] as $arSection):
   if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"])
      echo "<ul>";
   elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"])
      echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]);
   $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
?>
</div>
<div style="width:350px; float:left; margin:0 20px; border:#CCCCCC solid 1px;">
<?
$filename = '$arSection["PICTURE"]["SRC"]';

if (file_exists($filename))
{
echo '<img style="vertical-align:middle;" border="0" src=\"$arSection["PICTURE"]["SRC"]\" width="100" height="100" title=\"$arSection["NAME"]\" />';
}
else 
{
echo '<img style="vertical-align:middle;" border="0" src="/bitrix/templates/books/images/error.png" width="100" height="100">';
}
?>
<?=$arSection["DESCRIPTION"]?>
<a style="vertical-align:middle;" href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?>&nbsp;(<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a>
<?endforeach?>
</div>
</div>

Но выводит и в место тех что есть на самом деле картинки, и в место тех которых нет одну и ту же:
error.png - вот эту.
Я не очень сильно разбираюсь в php и только начал осваивать cms bitrix, так что прошу сильно не пинать, а помочь советом, делом, или дать ссылку на подобный пример и его реализацию.
Спасибо!
спросил 03 Сен, 13 от Pika (340 баллов)

5 Ответы

00 голосов
Вам не надо производить проверку file_exist. Если путь $arSection["PICTURE"]["SRC"] указан, значит он есть (скорее всего). Иначе $arSection["PICTURE"] - было бы пустым (файл не загружен). А если уж производите проверку file_exist, то перед $arSection["PICTURE"]["SRC"] надо указывать $_SERVER['DOCUMENT_ROOT'] потому что в $arSection["PICTURE"]["SRC"] путь от корня сайта, а надо проверять абсолютный путь от корня файловой структуры ОС. А вообще, ваш код лучше пусть будет таким:
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> 
<div class="catalog-section-list" style="margin:0 auto; width:800px;"> 
<div> 
<? 
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1; 
foreach($arResult["SECTIONS"] as $arSection): 
   if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"]) 
      echo "<ul>"; 
   elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"]) 
      echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]); 
   $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"]; 
?> 
</div> 
<div style="width:350px; float:left; margin:0 20px; border:#CCCCCC solid 1px;"> 
<? 
if ($arSection["PICTURE"]["SRC"]) { 
   echo '<img style="vertical-align:middle;" border="0" src="'.$arSection["PICTURE"]["SRC"].'" width="100" height="100" title="'.$arSection["NAME"].'" />'; 
} else {
   echo '<img style="vertical-align:middle;" border="0" src="/bitrix/templates/books/images/error.png" width="100" height="100">'; 
} 
?> 
<?=$arSection["DESCRIPTION"]?> 
<a style="vertical-align:middle;" href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?>&nbsp;(<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a> 
<?endforeach?> 
</div> 
</div> 
ответил 03 Сен, 13 от bazzet (620 баллов)
00 голосов
Ой, спасибо вам огромное, все заработало!
Поставил плюсик вам. :)
З.Ы. а вот про пристыковку совершенно забыл, вылетело из головы: '.$arSection["PICTURE"]["SRC"].'
ответил 24 Ноя, 13 от Pika (340 баллов)
00 голосов
Виталий,

здравствуйте.
Не подскажете, как определить, какие переменные находятся в массиве arSection или где об этом можно прочесть?

О переменной "изображение раздела" $arSection["PICTURE"] прочитал именно здесь на форуме.
Хочу узнать как вызвать переменную, содержащую описание раздела.

Спасибо Вам!
ответил 05 Март, 14 от Santinel (180 баллов)
00 голосов
Код
<?
echo "<pre>";
print_r($arSection);
echo "</pre>";
?>

Покажет вам весь массив
ответил 25 Июнь, 14 от FireLuna (580 баллов)
00 голосов
Павел, большое Вам спасибо!
ответил 25 Окт, 14 от Santinel (180 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 18 Июль, 13 от Man4esteR (180 баллов)
0 голосов
2 ответов
спросил 30 Май, 13 от Boyev (160 баллов)
0 голосов
1 ответ
0 голосов
4 ответов
спросил 01 Фев, 14 от NaSTeNa (100 баллов)