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

фотогалерея, детальная картинка в новом окне

00 голосов
8
Здравствуйте всем.
Помогите пожалуйста советом верстальщику.

Собственно необходимо чтобы по щелчку на уменьшенной картинке в галерее (photo.sections.top), в новом окне отображалось только одно фото реального размера, как по target="_blank". В общем отображение photo.detail вообще не нужно, главное чтобы полноразмерное фото открывалось в новом окне. Чтобы ненужно было проводить дополнительных махинаций с шаблоном сайта.
Можно ведь, конечно отверстать photo.detail, и задать странице с показом полноразмерных фото свой "пустой" шаблон, чтобы там было одно лишь фото, но это довольно трудоемко...


куски кода отвечающие за показ большой картинки я то нашел, а вот как это все претворить в действительно работающую галерею - не доходит :oops:

К примеру в photo.sections.top есть такой код перехода на photo.detail

Код
<?if(is_array($arItem["PICTURE"])):?>
<a href="<?=$arItem["DETAIL_PAGE_URL"]?>"><img border="0" src="<?=$arItem["PICTURE"]["SRC"]?>" width="<?=$arItem["PICTURE"]["WIDTH"]?>" height="<?=$arItem["PICTURE"]["HEIGHT"]?>" alt="<?=$arItem["PICTURE"]["DESCRIPTION"]?>" title="<?=$arItem["NAME"]?>" /></a><br />

<?endif?>


а в photo.detail есть такой код отображения полноразмерной картинки:

Код
<?if(is_array($arResult["PICTURE"])):?>

<img border="0" src="<?=$arResult["PICTURE"]["SRC"]?>" width="<?=$arResult["PICTURE"]["WIDTH"]?>" height="<?=$arResult["PICTURE"]["HEIGHT"]?>" alt="<?=$arResult["PICTURE"]["ALT"]?>" /><br />

<?endif?>


Но что делать с ними дальше, представляю смутно, есть мысль что в ссылку вызова photo.detail вставить путь к картинке <?=$arResult["PICTURE"]["SRC"]?> и открывать ее в новом окне..

Посоветуйте, пожалуйста, как сие можно осущетсвить...
спросил 10 Июнь, 13 от Traxexx (900 баллов)

8 Ответы

00 голосов
В компонентке photo.sections.top в параметрах добавьте выбор поля "Детальная картинка".

Т.е. вызов компоненты вот так выглядит.

Код
<?$APPLICATION->IncludeComponent("bitrix:photo.sections.top", ".default", array(
   "IBLOCK_TYPE" => "gallery",
   "IBLOCK_ID" => "9",
   "SECTION_SORT_FIELD" => "sort",
   "SECTION_SORT_ORDER" => "asc",
   "ELEMENT_SORT_FIELD" => "sort",
   "ELEMENT_SORT_ORDER" => "asc",
   "FILTER_NAME" => "arrFilter",
   "FIELD_CODE" => array(
      0 => "",
      1 => "DETAIL_PICTURE",
      2 => "",
   ),
   "PROPERTY_CODE" => array(
      0 => "",
      1 => "",
   ),
   "SECTION_COUNT" => "20",
   "ELEMENT_COUNT" => "9",
   "LINE_ELEMENT_COUNT" => "3",
   "SECTION_URL" => "",
   "DETAIL_URL" => "",
   "CACHE_TYPE" => "A",
   "CACHE_TIME" => "3600",
   "CACHE_FILTER" => "N",
   "DISPLAY_PANEL" => "N"
   ),
   false
);?>


Теперь в шаблоне тебе доступен путь к детальной картинке $arItem["DETAIL_PICTURE"]["SRC"]. Ну и все впринципе, теперь в шаблоне

Код
<a target = "_blank" href="<?=$arItem["DETAIL_PICTURE"]["SRC"]?>">
     <img border="0" 
     src="<?=$arItem["PICTURE"]["SRC"]?>" 
     width="<?=$arItem["PICTURE"]["WIDTH"]?>" 
     height="<?=$arItem["PICTURE"]["HEIGHT"]?>" 
     alt="<?=$arItem["PICTURE"]["DESCRIPTION"]?>" 
     title="<?=$arItem["NAME"]?>" />
</a>
ответил 10 Июнь, 13 от Incubus (580 баллов)
00 голосов
Спасибо за ответ, Александр.

Как это должно работать теперь понятно, только немного непонятно с параметрами photo.sections.top, где они хранятся? Я так понял, что у меня (шаблон фотогалереи скопирован в папку с общим шаблоном через режим разработки) параметры хранятся в файле sections_top.php:

Рисунок
Только вот код вызова там отличается от того что вы привели, там вместо параметров полсе знака =>, стоит одна переменная везде, можете пояснить пожалуйста, то ли я нашел, и если да, то как будет правильней добавить туда поле "детальная картинка", и почему у меня везде стоит переменная $arParams, а у вас значения?
Вот код вызова компонента bitrix:photo.sections.top в файле sections_top.php:
Код
<?$APPLICATION->IncludeComponent(
   "bitrix:photo.sections.top",
   "",
   Array(
      "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
      "IBLOCK_ID" => $arParams["IBLOCK_ID"],
      "SECTION_COUNT" => $arParams["SECTION_COUNT"],
      "ELEMENT_COUNT" => $arParams["TOP_ELEMENT_COUNT"],
      "LINE_ELEMENT_COUNT" => $arParams["TOP_LINE_ELEMENT_COUNT"],
      "SECTION_SORT_FIELD" => $arParams["SECTION_SORT_FIELD"],
      "SECTION_SORT_ORDER" => $arParams["SECTION_SORT_ORDER"],
      "ELEMENT_SORT_FIELD" => $arParams["TOP_ELEMENT_SORT_FIELD"],
      "ELEMENT_SORT_ORDER" => $arParams["TOP_ELEMENT_SORT_ORDER"],
       "FIELD_CODE" => $arParams["TOP_FIELD_CODE"],
       "PROPERTY_CODE" => $arParams["TOP_PROPERTY_CODE"],
      "DISPLAY_PANEL" => $arParams["DISPLAY_PANEL"],
      "SET_TITLE" => $arParams["SET_TITLE"],
      "USE_PERMISSIONS" => $arParams["USE_PERMISSIONS"],
      "GROUP_PERMISSIONS" => $arParams["GROUP_PERMISSIONS"],
      "CACHE_TYPE" => $arParams["CACHE_TYPE"],
      "CACHE_TIME" => $arParams["CACHE_TIME"],

      "SECTION_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["section"],
      "DETAIL_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["detail"],
   ),
   $component
);
?>


изменяю его вот таким образом:

Код
<?$APPLICATION->IncludeComponent(
   "bitrix:photo.sections.top",
   "",
   Array(
      "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
      "IBLOCK_ID" => $arParams["IBLOCK_ID"],
      "SECTION_COUNT" => $arParams["SECTION_COUNT"],
      "ELEMENT_COUNT" => $arParams["TOP_ELEMENT_COUNT"],
      "LINE_ELEMENT_COUNT" => $arParams["TOP_LINE_ELEMENT_COUNT"],
      "SECTION_SORT_FIELD" => $arParams["SECTION_SORT_FIELD"],
      "SECTION_SORT_ORDER" => $arParams["SECTION_SORT_ORDER"],
      "ELEMENT_SORT_FIELD" => $arParams["TOP_ELEMENT_SORT_FIELD"],
      "ELEMENT_SORT_ORDER" => $arParams["TOP_ELEMENT_SORT_ORDER"],
       "FIELD_CODE" => array(
      0 => "",
      1 => "DETAIL_PICTURE",
      2 => "",
   ), #$arParams["TOP_FIELD_CODE"],
       "PROPERTY_CODE" => $arParams["TOP_PROPERTY_CODE"],
      "DISPLAY_PANEL" => $arParams["DISPLAY_PANEL"],
      "SET_TITLE" => $arParams["SET_TITLE"],
      "USE_PERMISSIONS" => $arParams["USE_PERMISSIONS"],
      "GROUP_PERMISSIONS" => $arParams["GROUP_PERMISSIONS"],
      "CACHE_TYPE" => $arParams["CACHE_TYPE"],
      "CACHE_TIME" => $arParams["CACHE_TIME"],

      "SECTION_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["section"],
      "DETAIL_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["detail"],
   ),
   $component
);
?>


но, что-то не работает, выводит под названием картинки в bitrix:photo.sections.top
текст: Детальная картинка : Array
ответил 20 Июнь, 13 от Traxexx (900 баллов)
00 голосов
Цитата
Евгений Бескровный пишет:
Только вот код вызова там отличается от того что вы привели, там вместо параметров полсе знака =>, стоит одна переменная везде, можете пояснить пожалуйста, то ли я нашел, и если да, то как будет правильней добавить туда поле "детальная картинка", и почему у меня везде стоит переменная $arParams, а у вас значения?


Используешь комплексную компоненту bitrix:photo, поэтому и $arParams. А компонента sections_top в нее входит. Поэтому ей в параметры передаются параметры от комплексной =).

Ну там тоже есть поле FIELD_CODE. Вот туда и сувайте поле DETAIL_PICTURE (можно это сделать в графическом режиме или вручную)
ответил 24 Сен, 13 от Incubus (580 баллов)
00 голосов
Давайте скриншоты и код, ничего я не понял )
ответил 24 Дек, 13 от Incubus (580 баллов)
00 голосов
Все мне ясно стало теперь, только не видит bitrix:photo.sections.topадреса детальной картинки <?=$arItem["DETAIL_PICTURE"]["SRC"]?>, а если подставить в шаблон в ссылку уменьшенную, то все как надо открывается в новом окне:
Код
<a target = "_blank" href="<?=$arItem["PICTURE"]["SRC"]?>">
     <img border="0"
     src="<?=$arItem["PICTURE"]["SRC"]?>"
     width="<?=$arItem["PICTURE"]["WIDTH"]?>"
     height="<?=$arItem["PICTURE"]["HEIGHT"]?>"
     alt="<?=$arItem["PICTURE"]["DESCRIPTION"]?>"
     title="<?=$arItem["NAME"]?>" />
</a>
Ты вот сказал, что у составного компонента галереи есть свойство "FIELD_CODE", но в вызове моей bitrix:photoтакого свойства не было...
вот код вызова:
Код
<?$APPLICATION->IncludeComponent("bitrix:photo", "tmplt_photo", array(
   "IBLOCK_TYPE" => "gallery",
   "IBLOCK_ID" => "9",
   "SEF_MODE" => "N",
   "SEF_FOLDER" => "/automated_accounting_system/photo_gallery/",
   "AJAX_MODE" => "N",
   "AJAX_OPTION_SHADOW" => "Y",
   "AJAX_OPTION_JUMP" => "N",
   "AJAX_OPTION_STYLE" => "Y",
   "AJAX_OPTION_HISTORY" => "N",
   "CACHE_TYPE" => "A",
   "CACHE_TIME" => "3600",
   "CACHE_FILTER" => "N",
   "DISPLAY_PANEL" => "N",
   "SET_TITLE" => "Y",
   "SET_STATUS_404" => "N",
   "USE_PERMISSIONS" => "N",
   "USE_RATING" => "N",
   "USE_REVIEW" => "N",
   "USE_FILTER" => "N",
   "SECTION_COUNT" => "20",
   "TOP_ELEMENT_COUNT" => "9",
   "TOP_LINE_ELEMENT_COUNT" => "2",
   "SECTION_SORT_FIELD" => "sort",
   "SECTION_SORT_ORDER" => "asc",
   "TOP_ELEMENT_SORT_FIELD" => "sort",
   "TOP_ELEMENT_SORT_ORDER" => "asc",
   "TOP_FIELD_CODE" => array(
      0 => "",
      1 => "",
   ),
   "TOP_PROPERTY_CODE" => array(
      0 => "",
      1 => "",
   ),
   "SECTION_PAGE_ELEMENT_COUNT" => "20",
   "SECTION_LINE_ELEMENT_COUNT" => "2",
   "ELEMENT_SORT_FIELD" => "sort",
   "ELEMENT_SORT_ORDER" => "asc",
   "LIST_FIELD_CODE" => array(
      0 => "",
      1 => "",
   ),
   "LIST_PROPERTY_CODE" => array(
      0 => "",
      1 => "",
   ),
   "META_KEYWORDS" => "-",
   "META_DESCRIPTION" => "-",
   "DETAIL_FIELD_CODE" => array(
      0 => "",
      1 => "",
   ),
   "DETAIL_PROPERTY_CODE" => array(
      0 => "",
      1 => "",
   ),
   "DISPLAY_TOP_PAGER" => "N",
   "DISPLAY_BOTTOM_PAGER" => "Y",
   "PAGER_TITLE" => "Фотографии",
   "PAGER_SHOW_ALWAYS" => "Y",
   "PAGER_TEMPLATE" => "",
   "PAGER_DESC_NUMBERING" => "N",
   "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
   "AJAX_OPTION_ADDITIONAL" => "",
   "VARIABLE_ALIASES" => array(
      "SECTION_ID" => "SECTION_ID",
      "ELEMENT_ID" => "ELEMENT_ID",
   )
   ),
   false
);?>
если в этот код вставить свойство:
Код
"FIELD_CODE" => array(
      0 => "",
      1 => "DETAIL_PICTURE",
      2 => "",
   ),
но эффекту ноль.

Можешь пояснить, как через визуальный интерфейс вставить это поле в bitrix:photo чтобы в шаблоне photo.sections.top ссылка видела всетаки детальную картинку?
ответил 09 Апр, 14 от Traxexx (900 баллов)
00 голосов
Итак, чем дальше в лес, тем ближе вылез))
До меня дошло, что в компоненте bitrix:photo свойство "TOP_FIELD_CODE" аналогично свойству "FIELD_CODE" в photo.sections.top, поэтому в приведенном выше коде вызова компонента bitrix:photo, я заменил строчки:
Код
"TOP_FIELD_CODE" => array(
      0 => "",
      1 => "",
   ), 
на
Код
"TOP_FIELD_CODE" => array(
      0 => "",
      1 => "DETAIL_PICTURE",
      2 => "",
   ),

и прописав в ссылке в шаблоне photo.sections.top путь вида: <?=$arItem["DETAIL_PICTURE"]["SRC"]?> я наконец-то получил, детальную картинку в новом окне, но вот незадача, после того как я в вызове компонента добавил "DETAIL_PICTURE" у меня на сайте при отображении photo.sections.top под названием превью картинки вылазит надпись следующего вида:
Детальная картинка : Array
Так вот, как бы с этим разобраться? Может не то свойство добавлять вообще?
ответил 02 Авг, 14 от Traxexx (900 баллов)
00 голосов
Цитата
Евгений Бескровный пишет:
Так вот, как бы с этим разобраться? Может не то свойство добавлять вообще?

Поправьте шаблон нужного компонента, чтобы он не выводил дополнительные поля (вообще или только детальную картинку), так как эта функция шаблона, как я понял, не нужна.
ответил 05 Дек, 14 от Almarea (3,760 баллов)
00 голосов
Цитата
Дмитрий Яковенко пишет:
Поправьте шаблон нужного компонента, чтобы он не выводил дополнительные поля (вообще или только детальную картинку), так как эта функция шаблона, как я понял, не нужна.

Спасибо вам большое, Дмитрий, что прервали блуждание в трех соснах) все оказалось довольно просто, с точки зрения конечно меня - верстальщика, ибо я не разработчик и так до конца и не понял как эти свойства вообще работают)
но в шаблоне отвечающие за их показ строчки удачно закомментил, теперь все прекрасно работает так как нужно. :)
закоментил в photo.sections.top вледующее:
Код
<?foreach($arParams["FIELD_CODE"] as $code):?>
  <small><?=GetMessage("IBLOCK_FIELD_".$code)?> : <?=$arItem[$code]?></small><br />
<?endforeach?>

Спасибо большое всем за ответы ;)
Хорошо что есть профи, которые тратят время на советы начинающим.
ответил 29 Март, 15 от Traxexx (900 баллов)

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

0 голосов
6 ответов
спросил 11 Окт, 13 от KOZA (120 баллов)
0 голосов
10 ответов
спросил 09 Фев, 13 от FanKoRn (240 баллов)
0 голосов
4 ответов
спросил 28 Сен, 13 от Kiriel (2,010 баллов)
0 голосов
6 ответов
спросил 06 Май, 13 от VZlomali (200 баллов)
0 голосов
7 ответов
спросил 10 Июль, 13 от 666KREVED (760 баллов)