Разработчики часто используют класс COption для хранения и вывода значений каких-либо переменных. И по сути ничего не мешает в этом классе хранить и какие-то переменные сайта/шаблона. Как то: телефон, e-mail и прочие мелкие значения в шаблоне сайта. Часто проблема решается вставкой включаемой области, которую могут править потом редакторы. Но не всегда... [spoiler] Например, в такой ситуации включаемая область мало поможет:
Помещать весь блок кода в одну включаемую область? Не очень красиво. Создавать 3-4 включаемых области? Зачем нам +3-4 доп.файла цеплять? Выход? Хранить все это в вышеозвученном классе. Но как туда записать, и как легко потом менять сие редактору?
Решение и практика
Так родилась идея простого модуля, который бы позволял легко сохранять и выводить такие переменные.
Далее выводим все простой функцией API (о ней ниже):
<?= tplvar('skype');?>
Но это еще не все если у вас есть права на редактирование шаблона и включен режим правки, рядом с каждым значение появится иконка редактирования:
При клике на которую вы переходите к редактированию данной переменной:
Теперь пару слов о функции. Доступна она всегда (после установки модуля) без подключения самого модуля. У нее есть два режима:
1. Для использования голого значения переменной:
<?= tplvar('skype');?>
Например, в коде, или где не требуется вывод иконки даже в режиме редактирования (например, mailto: $var).
Показывает иконку редактирования только в режиме включаемых областей. Хороший пример применения - ссылка на какой-то файл в шапке сайта:
<a href="<?= tplvar('wholesale_pdf');?>">Скачать каталог в PDF</a>
Даже в режиме включаемых областей, нет возможности посмотреть иконку, так как она спрятана в href будет (если быть точным, в данном случае она не выведется вовсе). Поэтому делаем так:
<a href="<?= tplvar('wholesale_pdf');?>">Скачать каталог в PDF</a><?= tplinvis('wholesale_pdf');?>
Имеем иконку, которая появится только в режиме редактирования:
Функция tplvar_set
Применяется для установки значения для определенного кода (например, из API). Использование:
tplvar_set($code, $value, $site);
Все три переменные обязательны: код свойства, значение, ID сайта.
Общие замечания
Модуль работает в рамках текущего сайта (SITE_ID). Вам не надо заботиться о проверке сайта, и одна и та же переменная на разных сайтах может иметь разное значение (например, skype на разных сайтах разный).
Я намеренно сделал вызовы API обезличенными, чтобы партнеры могли применять этот модуль в своей работе не переживая за префиксы чужого партнера.
Прекрасное и очень полезное решение. Теперь ни один мой проект не будет выполнен без него. У меня складывается ощущение, что либо Антон не человек и не спит совсем, либо под этим именем работает команда разработчиков - иначе как можно объяснить такую продуктивность. Скоро данный раздел будет называться не "Блоги веб-разработчиков", а "Блог ASD" )
Есть уже несколько подобных решений для опций сайта. Хотел даже написать свой велосипед. Судя по скриншотам, у Антона лучшее решение для контент-менеджера.
Артем:У меня складывается ощущение, что либо Антон не человек и не спит совсем, либо под этим именем работает команда разработчиков - иначе как можно объяснить такую продуктивность.
Да, можно только искренне позавидовать способностям и стремлениям Антона отшлифовать свои решения, каждое из которых закрывает ту или иную востребованную функциональность.
Когда я однажды в библиотеке увидел огромный многоуровневый стелаж книг, которые написал В.И. Ленин, первое что я подумал - нас обманывают и Ленин это группа авторов. С Антоном та же история. Мне иногда кажется что это группа авторов
В свое время я побывал гейм-задротом и очень сложно выйти из гейм-клуба (тогда еще там все засиживались), пока не завершишь миссию, не завалишь босса, и так далее. Вот здесь нечто похожее - пока не закрыл миссию (включая выпуск модуля) - не сможешь встать, затягивает на мелочь всегда уходит 3-4 часа, включая этап тестирования и отладки. Крупняки идут тяжелее (ибо тоже затянет, а это риск остаться без работы и штанов, если идея никому не вопьется), поэтому на глобальные идеи пока и не достает времени (точнее я себе не выдаю).
Дополнил функцией tplinvis. Показывает иконку редактирования только в режиме включаемых областей. Хороший пример применения - ссылка на какой-то файл в шапке сайта:
<a href="<?= tplvar('wholesale_pdf');?>">Скачать каталог в PDF</a>
Даже в режиме включаемых областей, нет возможности посмотреть иконку, так как она спрятана в href будет (если быть точным, в данном случае она не выведется вовсе). Поэтому делаем так:
<a href="<?= tplvar('wholesale_pdf');?>">Скачать каталог в PDF</a><?= tplinvis('wholesale_pdf');?>
Имеем иконку, которая появится только в режиме редактирования:
Антон, а зачем для этого использовать COption ? Может быть было проще для хранилища использовать формат языкового файла, а потом в нужных местах выводить через GetMessage ? Такой файл можно будет редактировать еще и через файловый доступ, а не только через интерфейс
Жень , идейка необычна, даже не думал о ней но имхо неудобно. Все же язык это язык а такое хранение переменных подразумевает, что они могут использоваться и в логике сайта (я уже поставил в план сделать различные типы переменных, а в твоем случае нельзя будет хранить тот же файл, к примеру).
Алексей, в плохом маркетинге прежде всего потому что забыл напрочь про данное решение (хотя смотрел когда оно вышло и даже писал комментарий Оо). Но давайте вместе посмотрим на него:
1. "Ошибка будет, если версия ядра ниже 11.5, используется некоторый новый функционал". Из комментариев. Почему такое ограничение - так и не понял.
2. Непонятно зачем городить было свои типы свойств, когда можно прекрасно использовать пользовательские свойства (что я хочу сделать). Решился бы вопрос кастомного типа св-ва.
3. Требует подключения модуля на странице перед использованием, что попросту неудобно при работе (у меня подрубается файл в 20 строчек на каждой странице).
4. Огромадное именование вызова (WS_PSettings::getFieldValue), что просто крайне неудобно при интеграции шаблона (tplvar легко запомнить).
5. С виду как плюс, но на деле минус - сначала надо задавать свойство, а потом его использовать. В моем случае вызывается tplvar('site_email');, которое может позже заполниться редактором сайта в режиме редактирования.
Но прежде всего - про него забыл да и не я один, судя по 18 лайкам. Но даже если бы вспомнил - по описанным минусам он бы мне не подошел.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».