Здравствуйте, умные люди. Научите пожалуйста верстальщика правильно укрощать включаемые области
Структура сайта такова: есть как огромное количество отдельных страниц расположенных просто в корне сайта, так и большое число разделов (папок со страницами).
Задача: повесить на все страницы сайта в шаблоне включаемую область, за исключением одной единственной страницы, расположенной в корне сайта.
В мой неокрепший мозг приходит единственный вариант использования двух одинаковых по содержанию включаемых областей , для всех страниц, расположенных в корне сайта (за исключением той для которой область показывать не нужно) задать эту включаемую область "для страницы" файлом "названиестраницы_inc.php":
Можно ещё вставить грязный костыль. Сделать одну включаемую область sect_inc.php в корне, а для той самой особенной страницы делать проверку по какому-нибудь флагу или вообще по url. Очень некрасиво, конечно, зато удобно Особенно, если много разделов и страниц в корне, а область везде одинаковая.
Евгений Бескровный пишет: Задача: повесить на все страницы сайта в шаблоне включаемую область, за исключением одной единственной страницы, расположенной в корне сайта.
Самый тупой (в лоб) вариант - два шаблона. Один, без включаемой области, для корневой страницы, второй, со включаемой, для всех (область брать для раздела, с настройкой "рекурсивно"). Либо воспользоваться вариантом, который предложила Ольга Трушина.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Ясно, спасибо. У кого еще какие идеи? Может из самого битрикса кто-нибудь заглянет сюда
Плодить шаблоны из за одной включаемой, имхо извращение еще то
Ольга, а можно поконкретнее, как именно это можно осуществить, примерчик бы кодика
И почему Вы это считаете некрасивым костылем? Ведь как я понял других (менее затратных) способов,кроме того, который привел я ведь нет? И кстати, если во всем следовать идеологии построения шаблона битрикса, то мой вариант самый "правильный" ?
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Евгений Бескровный пишет: Задача: повесить на все страницы сайта в шаблоне включаемую область, за исключением одной единственной страницы, расположенной в корне сайта.
Код
<?php if(!CSite::InDir("/test/")):?>
а тут включаемая область которая не покажется только в папке "/test/"
<?endif;?>
Евгений Бескровный пишет: И кстати, если во всем следовать идеологии построения шаблона битрикса, то мой вариант самый "правильный"
Ваш "вариант" - монстрообразная вариация идеи, которую предложила Ольга. Кстати, в приведенном Вами коде как раз нет определения, какую область показывать. А почему костыль - достаточно просто. При изменении условий придется опять править шаблон, вот и все.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Евгений Жуков пишет: в приведенном Вами коде как раз нет определения, какую область показывать.
Позвольте, позвольте, тезка, как же это нет определения какую показывать?) перечитайте мою монстроподобную идею еще разок, Вы кажется не все поняли, мой вариант вполне рабочий, если все файлы раскидать куда надо, и определить эти две включаемые области в шаблоне и выставить им соответствующие настройки. Просто файла ведь для той страницы на которой показывать не нужно не будет, а включаемая область для раздела не покажется, потому что файлы включаемой области для разделов будут в папках разделов, а в корне этого файла не будет
А за кодик спасибо, теперь буду знать
А про правильность, я просто хочу для себя выяснить, как же всетаки правильно осуществить такую возможность. Ведь должен же быть правильный способ (как бы это сделали сами разработчики битрикса) и много разных вариаций как его так и просто костылей.
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Попов Кирилл пишет: <?php if(!CSite::InDir("/test/")):?> а тут включаемая область которая не покажется только в папке "/test/" <?endif;?>
кстати мне нужно не показывать область для определенной страницы (к примеру "test.php"), расположенной в корне сайта, как будет выглядеть код в этом случае?
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Евгений Бескровный пишет: Позвольте, позвольте, тезка, как же это нет определения какую показывать?) перечитайте мою монстроподобную идею еще разок
Перечитал. Объясняю на пальцах. Вы подготовили ВЫЗОВЫ включаемых областей. Замечательно. Теперь вы их вставляете в шаблон сайта друг за другом, не так ли? Но в Вашем коде я не увидел ответа на вот это:
Цитата
Евгений Бескровный пишет: для всех страниц, расположенных в корне сайта (за исключением той для которой область показывать не нужно)
Система - дура, она русский язык не понимает. Ей условия подавай. Или Вы собрались для КАЖДОЙ страницы, лежащей в корне, создавать файлик
Цитата
Евгений Бескровный пишет: "названиестраницы_inc.php"
? Если так, уж простите, на язык просится цитата из известного анекдота - "поручик был большой забавник". Зачем Вы этакую свинью подкладываете девочке - контент-менеджеру? Для каждой новой страницы создай включаемую область, скопируй из уже имеющейся код, при удалении страницы не забудь удалить включаемую область? А если в корне будет хотя бы 2-3 десятка страниц? Это сколько лишней работы?
Не надо сверлить зубы через задний проход дрелью от Сваровски
Единого решения тут нет, каждый раз делают, исходя из начальных условий. Два шаблона как раз хороши минимизацией затрат. В случае, когда у Вас условие "показывать всем, кроме" либо "показывать всем одно, а одной - другое", ну $APPLICATION->GetCurPage() Вам в помощь. Получаете адрес текущей страницы, сравниваете с условием, дальше выводите/не выводите то, что требуется.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Евгений Жуков пишет: Если так, уж простите, на язык просится цитата из известного анекдота - "поручик был большой забавник". Зачем Вы этакую свинью подкладываете девочке - контент-менеджеру? Для каждой новой страницы создай включаемую область, скопируй из уже имеющейся код, при удалении страницы не забудь удалить включаемую область? А если в корне будет хотя бы 2-3 десятка страниц? Это сколько лишней работы?
Евгений, видимо Вы не до конца разобрались с работой включаемых областей в битриксе. Не печальтесь, я тоже многого не понимал причем очень долго
В данном случае совсем не нужно для каждой страницы создавать в коде шаблона включаемую область, как я и отметил в самом начальном своем посте. Достаточно определить в коде шаблона, вызов всего лишь двух включаемых областей, одну "для страницы", вторую "для раздела". Та которая "для страницы" будет отображать включаемые области заданные для каждой страницы по шаблону названиестраницы_inc.php(если они есть), т.е. в настройках этой первой включаемой области мы выбираем "для страницы" и ставим индекс inc, т.е. если для страницы test.php есть одноименный файл включаемой области test_inc.php, то включаемая область на странице test.php отобразится, а если такого файла не будет - то нет. Я что-то не пойму, откуда Вы взяли то, что в коде шаблона нужно указывать для каждой отдельной страницы вызов включаемой области? Бедной девочке контент-менеджеру не нужно будет ничего копировать и создавать, будет много гемороя у програмиста, просто копировать дополнительно файл включаемой области для каждой страницы в корне сайта.
Да и пример этот я привел, просто для того, чтобы понять, как делать ПРАВИЛЬНО с точки зрения разработчиков БУСа.
Все что я узнал (даже не из курсов, потому что в курсах я не нашел нормального объяснения работе с включаемыми областями), о работе с включаемыми областями и позволило мне описать этот способ.
Я просто хочу докопаться до истины. Как же всетаки правильно "по-битриксовски" что-ли поступить в таком случае.
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Евгений Бескровный пишет: Я что-то не пойму, откуда Вы взяли то, что в коде шаблона нужно указывать для каждой отдельной страницы вызов включаемой области?
Где я, черт побери, это говорил? Вот мои слова:
Цитата
Евгений Жуков пишет: Или Вы собрались для КАЖДОЙ страницы, лежащей в корне, создавать файлик
То есть я Вас спросил, собираетесь ли Вы для каждой страницы в корне Вашего сайта создавать включаемую область. Цитирую Ваш последний ответ:
Цитата
Евгений Бескровный пишет: Та которая "для страницы" будет отображать включаемые области заданные для каждой страницы по шаблону названиестраницы_inc.php(если они есть), т.е. в настройках этой первой включаемой области мы выбираем "для страницы" и ставим индекс inc, т.е. если для страницы test.php есть одноименный файл включаемой области test_inc.php, то включаемая область на странице test.php отобразится, а если такого файла не будет - то нет.
Я Вам который раз пытаюсь объяснить, что Ваш способ - просто увеличение затрат времени и того, кто будет заниматься наполнением, и того, на чьи плечи ляжет поддержка сайта.
Цитата
Евгений Бескровный пишет: се что я узнал (даже не из курсов, потому что в курсах я не нашел нормального объяснения работе с включаемыми областями), о работе с включаемыми областями и позволило мне описать этот способ.
Ваш способ говорит, что Вы ВООБЩЕ не поняли, ни что такое включаемая область, ни как с ней работать. Откройте простейшее руководство по интеграции, все же описано.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Извините, Евгений, значит я неправильно понял что вы имели ввиду под "Для каждой новой страницы создай включаемую область, скопируй из уже имеющейся код".
Мой способ говорит, о том, как бы понял это простой пользователь не программист (я не программист, а верстальщик, немного разные понятия). И я понимаю что трудозатраты очень велики.
Простоя пытаюсь понять, почему вообще разработчики битрикса так реализовали этот механизм включаемых областей, не продумав такой случай задания этой области с исключением в одну страницу или просто я что-то упустил
А в курсе по интеграции про работу с включаемыми областями сказано очень мало и согласитесь понять простому смертному тот бред сразу довольно сложновато Я не говорю уже про объяснение работы с шаблонами включаемых областей, кои у меня так и не заработали, наверное руки кривоваты
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Евгений Бескровный пишет: Задача: повесить на все страницы сайта в шаблоне включаемую область, за исключением одной единственной страницы, расположенной в корне сайта.
Если речь вести об идеологии, мне кажется, тут неверная постановка задачи. Дело в том, что, по большому счёту, шаблон, плюс одинаковая для нескольких страниц включаемая область – это и есть уже новый шаблон, но без включаемой области. Предположительно, для Вашей задачи вёрстки, когда одна страница по структуре выбивается из общего ряда, нужно всего два шаблона и не нужно совсем включаемых областей. Поэтому, согласен с Евгением Жуковым, его Первым вариантом:
Цитата
Евгений Жуков: Самый тупой (в лоб) вариант - два шаблона.
Вариант хоть и в лоб, но не тупой, мне нравится, вижу преимущества: 1. Наглядность и прозрачность (просто, дёшево, надёжно и практично). Ясно для чего сделан каждый шаблон, т.к. есть условия их применения. Если удалите страницы, то отключите и шаблон, без изменений в других шаблонах других страниц. 2. Масштабируемость. Хоть в условии и сказано, что страница одна, но идеология от количества страниц не зависит, что верно для нескольких страниц, то и для одной (одна – это частный случай нескольких).
Второй вариант: использовать один шаблон на все страницы, но так исхитрится с вёрсткой шаблона, чтобы сделать только одну включаемую область для той страницы, которая выбивается из общего ряда.
Третий вариант: использовать один шаблон на все страницы, но так исхитрится с CSS файлом и вёрсткой шаблона, чтобы отключить показ ненужного блока на той странице, которая выбивается из общего ряда.
Спасибо, Алексей, у меня в этой включаемой, которую нужно было показывать на всех страницах кроме одной, было немного незамысловатого html кода, вышел из положения просто использованием проверки на соответствие адреса апи функцией $APPLICATION->GetCurPage() по совету Евгения.
Цитата
Алексей Комаров пишет: вижу преимущества:
насчет преимуществ, меня в использовании нескольких шаблонов смущает одна вещь, как идеологически правильно добиться универсальности на уровне шаблонов компонентов и CSS? Я имею ввиду чтобы на все шаблоны был как один CSS файл, так и одни и те же шаблоны компонентов.
Моя версия - одинаковые для всех шаблонов, шаблоны компонентов выкладывать в шаблон .default (сам не пробовал но говорят будут доступны для всех шаблонов), а CSS файл подключать откуда-то из общей папки обыкновенным тегом link.
Насчет CSS я не уверен, может быть есть способ как-то по-другому подключить один файл для всех шаблонов?
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Если у Вас один и тот же шаблон компонента используется в нескольких шаблонах сайтов, то да, его надо помещать в шаблон .default - так придумано разработчиками БУС. А вот css у каждого шаблона свой. Я так понимаю, Вы не хотите каждый раз копировать css-файл шаблона сайта после внесения изменений? Ну, тогда есть вариант $APPLICATION->SetAdditionalCss('абсолютный путь к файлу'), хотя это будет идеологически неверно.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Значит полюбому у шаблона сайта должны быть два CSS файла и их вызов никак не удалить, чтобы не грузились зря, если один общий использовать?
Кстати, в битриксе не реализован механизм подгрузки основных файлов если они были модифицированы. хотя для файлов шаблонов компонентов в конце файла прибавляется date stamp. Очень неудобно когда нужно что-то поправить на довольно посещаемом сайте. Приходится подгружать дополнительные файлы. Можно ли это как-нибудь автоматизировать? Я здесь темку поднимал. Тут товарищ в ядре поковырялся даже) http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic21661/message118768/?phrase_id=2503617#message118768
Профессионально занимаюсь версткой и интеграцией оной в шаблон «1С-Битрикс» beskrovnyy.com
Могут и отсутствовать. Хотя я всегда просто копирую - так надежней и проще для меня. А date stamp пишется, только если браузер - не Опера. Автоматизировать - читайте RFC по http. А товарищу руки надо оторвать. За распространение вредных идей.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Евгений Бескровный пишет: Значит полюбому у шаблона сайта должны быть два CSS файла и их вызов никак не удалить, чтобы не грузились зря, если один общий использовать?
Думаю, что будет хорошо, если в этих файлах хоть что-то будет, пусть и минимум.
Например, в CSS файле, относящемся к шаблону, общая основная разметка страницы на блоки и их позиционирование, выравнивание этих блоков относительно друг друга, их ширина, отступы, цвет фона, картинки фона, т.е. то, что неизменно до момента полного редизайна сайта или раздела сайта и не относится к контенту. И шрифты по умолчанию для страниц (для абзацев, заголовков). Скажем, шаблон двухколоночной вёрстки страницы или шаблон трёхколоночной. Но, конкретных шрифтов и форматирования конкретных участков содержимого контента там не указывать, только общие по умолчанию.
А, во втором CSS файле, относящемся к шаблону, только минимум, самые крохи, общего для страниц форматирования контента, который может понадобится контент-редакторам сайта, чтобы им самим не нужно было лезть в файл CSS и писать там классы форматирования.
Тогда, эти два файла CSS шаблона удалять не потребуется и пользу принесут какую-то.
Ну, лично у меня тестовый сервак ничего не кеширует (я про статику). А когда все уже закончено - это уже не важно. На крайний случай иду и выношу кеш браузера - вот и все.
Не надо сверлить зубы через задний проход дрелью от Сваровски
Евгений Бескровный пишет: А на счет замены css файлов, как Вы эту проблему решаете? Простой подгрузкой дополнительных файлов?
Подгрузку дополнительных файлов не использую. Если в шаблон нужно вставить компонент, то стараюсь окружить каждый компонент или несколько однотипных компонентов его (их) личным блоком с идентификатором. Это даёт возможность сослаться на идентификатор блока в основном файле CSS шаблона и задать основное форматирование содержимого блока и ссылку на url картинки фона (сама картинка может быть одна для нескольких шаблонов и лежать в отдельной общей директории на которую ссылаются CSS шаблонов, иметь абсолютную адресацию, если нужно избежать дублирование изображений). Форматирование такого блока определяет и форматирование вывода содержимого компонента (например, шрифтом родительского блока, особенно, если указать не фиксированный, а относительный для гибкости), т.к. компонент получается, что вложен. И, упрощается, на мой взгляд, применение каскада при каскадном форматировании содержимого блока или компонента, через те самые правила CSS. А, шаблон самого компонента стараюсь не трогать, т.е. использовать тот, что по умолчанию, он как бы остаётся в резерве, до него, поначалу, вообще может и дело не дойти, если стандартный более-менее устраивает в целом. Всегда можно, потом, когда-нибудь доработать, если что-то не так выглядит и будут нарекания. Так получается, что подгрузка происходит сама, через подгрузку CSS шаблона (содержит идентификаторы для блоков компонентов и их форматирование, насколько возможно через идентификаторы) и CSS компонентов (стандартные по максимуму).
И, если этот шаблон нужно использовать для других страниц (или доработать), но он немного не подходит, его можно скопировать, удалить и из шаблона и из CSS шаблона ненужные блоки по идентификаторам, а каркас останется как заготовка с нужными идентификаторами и их форматированием.