Привязка блока к странице

Добрый день

Подскажите как привязать определенный блок к странице?

Пример:

Есть блок {$wa->block("contact")} нужно что бы он выдавался на определенной странице /contacts/или нескольких страницах (без добавления кода в файл index.html

В идеале было бы создать возможность устанавливать галочку в настройках страницы выдавать данный блок или нет.

Спасибо

19 ответов

  • 1

    Если не хочется редактировать шаблоны дизайна, можно добавить условие в код самого блока:

    {if strpos($wa->currentUrl(), '/contacts/') === 0 || strpos($wa->currentUrl(), '/about/') === 0} {* если относительный URL начинается на /contacts/ или /about/ *}
    ...отображать код блока...
    {/if}

  • 1
    Виталий 19 мая 2015 06:55 #

    Создал блок с кодом

    {if strpos($wa->currentUrl(), '/contacts/') === 0 || strpos($wa->currentUrl(), '/about/') === 0} {* если относительный URL начинается на /contacts/ или /about/ *}

    ...отображать код блока...

    {/if}

    но он не выводится на странице контакты?


  • 1
    Виталий 19 мая 2015 06:55 #

    Как добавить скрин в комментарии?

  • 1

    Каков полный URL страницы, на которую вы добавили блок? Если что-то вроде /site/contacts/, то в условие в коде блока нужно добавить вот это /site, иначе условие не сработает.

  • 1
    Виталий 19 мая 2015 07:04 #

    полный урл http://site/contacts/

    На саму страницу нужно добавлять какой то код?

  • 1

    Кода вызова блока, как минимум: {$wa->block("***")}

  • 1
    Виталий 19 мая 2015 07:24 #

    Так работает, спасибо большое!

    Но так все равно нужно добавлять код в файл index. Есть ли возможность прикрутить данный блок с помощью настройки страницы (Дополнительные параметры страницы)?


  • 1
    Виталий 19 мая 2015 07:43 #

    Подскажите еще как правильно подключать плагины к редактору? http://imperavi.com/redactor/plugins/

  • 1

    >>> Есть ли возможность прикрутить данный блок с помощью настройки страницы (Дополнительные параметры страницы)?

    Можно, но всё равно нужно вносить изменения в код шаблона, если нужно изменить содержимое дизайна, а не содержимое отдельной страницы.

    >>> как правильно подключать плагины к редактору? http://imperavi.com/redactor/plugins/

    Может, всё-таки создадите для этого новую тему на форуме? ;)

  • 1
    Виталий 19 мая 2015 08:00 #

    Может посоветуете как правильно сделать?

    Задача стоит так: макет сайта состоит из разных шаблонов страниц (у каждой страницы свой дизайн)

    Первый вариант: Делал блоками {$wa->block("contact")} код вставлял в редактор страниц. Но сам редактор форматирует его и получаеться так: <p>{$wa->block("contact")}</p> на сколько я знаю это не правильно

    Второй вариант: выводил на определенной странице файлы page-contact.html

    {if $page.extra_class == '3'}

    {include file="`$wa_active_theme_path`/page-contact.html" inline}

    {/if}

    с нужными кусками кода. Но при таком выводе не выводится правильно страница ошибки 404 так как в коде нету {$content}

    Третий вариант: просто вставить код шаблона в визуальный редактор, но это не очень удобно

    Посоветуйте как правильно реализовать данную задачу.

    Спасибо

  • 1

    А. Можно использовать разные темы дизайна для разных (групп) страниц. Создайте нужные темы со своими вариантами оформления и добавьте нужное количество поселений Сайта в разделе Структура. Для каждого поселения выберите свою тему дизайна, как вам нужно. Потом в разделе Страницы создайте нужные страницы для каждого поселения — к ним автоматически прицепится тот дизайн, который вы выбрали в свойствах соответствующего поселения.

    Б. Если создание нескольких поселений неудобно по каким-то причинам, то можно вот так поредактировать тему дизайна (к примеру, создайте клон какой-то стандартной темы и начинайте издеваться над ним, чтобы не портить оригинальную тему):

    1. Определите, какой вариант дизайна считать стандартным, а какие — "особенными" (для отдельных страниц).

    2. В свойствах отдельных страниц добавить доп. параметр, который потом будет использоваться в теме дизайна, например, так:

    layout=contacts

    3. В теме дизайна в самом начале index.html добавить вот такой фрагмент:

    {$custom_layout = ifset($page.layout)}

    4. Там же в index.html добавить вот такой фрагмент в открывающий тег <html>:

    <html{if $custom_layout} class="{$custom_layout}-layout"{/if}>

    Это позволит писать CSS-стили для разных макетов, например:

    .contacts-layout body { }
    .about-layout body { }

    и т. д.

    5. Строку

    {$custom_layout = ifset($page.layout)}

    возможно, придётся продублировать в других шаблонах, если в них понадобится значение переменной {$custom_layout}

  • 1
    Виталий 19 мая 2015 08:38 #

    В параметры страницы добавил: layout=contacts

    В начале основного файла index.html добавил: {$custom_layout = ifset($page.layout)}

    Не работает?

  • 1

    Что именно не работает?

  • 1
    Виталий 19 мая 2015 09:00 #

    Если я правильно понял принцип должен изменится дизайн страницы /contacts/?

  • 1

    Нет. От этого только присвоится значение переменной. Для того, чтобы что-то изменилось, я и перечислил все шаги. Но если вы не понимаете, как это работает, то лучше попробуйте сначала разобраться, а не просто повторять "вслепую" — так у нас переписка может затянуться, а у меня не всегда может быть время вам ответить.

  • 1
    Виталий 19 мая 2015 09:11 #

    Понял, спасибо большое за помощь. Буду разбираться.

  • 1

    И, кстати, вариант А выглядит в целом более выгодным и грамотным — попробуйте им воспользоваться.

  • 1
    Виталий 19 мая 2015 09:49 #

    Я думал над этим, но получаеться нужно создавать очень много шаблонов (10 шт.)

    И если мне к примеру нужно будет что то изменить сразу во всех шаблонах ( примеру в header) то нужно править все 10 файлов.

    В принципе отличие макета только сама страница page.html

    header и footer одинаковы для всех страниц

  • 1

    И все же. Что мешает в самом коде страницы всё вписать? Вместе с версткой. На крупных сайтах именно так и делают в подобных случаях

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите