Здравствуйте!
подскажите как реализовать такую возможность:
1. в админке возможность задать телефон
2. телефон выводится в теме (в шапке и футоре сайта)
3. телефон выводиться на некоторых страницах сайта (например в контактах или какой-либо статье)
4. при смене телефона в админке сайта, телефон меняется везде (и в теме, и в текстах статей и в контактах)
как это сделать?
Комментарии
token?
спасибо, вроде то что надо,
как я понимаю теперь это часть ядра d7, но в списке модулей нет модуля token
не могу понять как мне их использовать?
Где они (small bits of text) теперь находятся? Как их задать и как их использовать:
1. в теме
2. в странице (при добавлении контента)
Custom Tokens
ого, смотрю тут не особо многословны ...
ладно, спасибо большое и на этом (действительно спасибо, это не сарказм), попробую поставить этот модуль
оф. описание модуля тоже не особо подробно: "It gives the user the ability to create custom tokens for specific replacements that can improve other modules relying on the Drupal 7 token API or, for Drupal 6, the Token module."
дает возможность, но блин, как их использовать?!
Как токены
как-то?
Можно без модулей сделать. Вот тут сам принцип показан. Для 7 даже проще чем для 6.
я наверно тупой или что то не понимаю но тупо создать простой блок с телефоном и разместить где хочеться не катит?
так, не работает
по всей видимости надо еще и это Token Filter?
первая мысль тоже такая была, через блок, но как быть с пунктом:
"3. телефон выводиться на некоторых страницах сайта (например в контактах или какой-либо статье)"
да просто, делаем ввод значения, через phone.admin.inc скажем задаем значение переменной, а потом блоком отображаем эту переменую где нада, зачем слоган пееменую то трогать?
как еще вариант чтоб пушкой не стрелять в блок запихать пхп код который скажем записывает значение в базу данных (показываеться только в админке), а со стороны юзера выводиться где хочеш...
Вот это, имхо гемор - ради одного телефона писать модуль, чтобы через hook_menu создать страницу в админке для его ввода, это как-то из пушки по воробьям
Как вариант - воспользоваться каким-нибудь неиспользуемым значением из раздела "Информация о сайте", слоган вполне может подойти: в переводе интерфейса найти строку "слоган" и заменить её на "телефон", чтобы не сбивала с толку
достигается правкой шаблонов - вставкой
<?php print $slogan; ?>
там, где это требуетсялибо вставкой вышеуказанного кода, надо будет указывать формат ввода - php (не гуд), либо токенами (возможно, потребуется отдельный формат ввода)
PROFIT!
вроде то что надо, но придется пожертвовать $slogan; — что не хорошо само по себе, и выглядит как костыль
я сейчас пытаюсь использовать custom tokens — но не могу понять как токены можно вывести в page.tpl.php?
Аааа, держите меня семеро, заработало!!!
Итак, для потомков, алгоритм действия
Если Вам надо размещать на сайте маленькие кусочки текста (такие как например телефон компании) с возможностью изменения значения из админки то для Drupal 7 делаем:
1.
ставим модули:
token (да-да, в D7 core перенесли не все, и без модуля работать не будет) — для самих токенов
token_custom — для пользовательских токенов, задаются через php, т.е. в примере с телефоном надо будет задать что-то вроде echo '500-50-50';
token_filter — для вывода токенов в содержимом (статьях и прочем)
2.
включаем Token Filter для каждого из требуемх Вам форматов ввода (в админке, в настройке фильтров ввода)
например для Full HTML
3.
задаем пользовательский токен (custom token), например так
Token name: Phone Machine name: phone
Token description: Телефон фирмы
Token type: Custom tokens
PHP replacement: echo '500-50-50';
4.
используем:
в выводе содержимого как [custom:phone] при формате ввода который установили в пункте 2 (Full HTML)
в шаблоне темы как <?php print token_replace('[custom:phone]', array('node' => $node)); ?>
Теперь изменив в админке токен phone у нас на всем сайте поменяются телефоны и в дизайне (шаблоне), и в текстах содежримого
Profit!!!
ps: что-то мне подсказывает что использование print token_replace('[custom:phone]', array('node' => $node)); в шаблоне не есть хорошо, т.к. при большом кол-ве токенов (а они бывают не только custom, их много и в ядре) все будет тормозить
А не изящней будет просто добавить хуком еще одно поле к формк system-site-information-settings и писать его в variables?
я не могу понять как пользователь сайта (Editor) при добавлении статьи, в статье укажет блок таким образом что было что-то вроде
<div>Бла-бла-бла, мы самая лучшая шарага на просторах России про производству картофеля,
по рекламациям звоните в отдел контроля формы картофеля <span><strong>500-50-50</strong></span></div>
<div>Бла-бла-бла</div>
Причем этот-же телефон указан на странице контактов, и шапке сайта и в футере и еще где-нибудь
В определенный момент Editor меняет телефон в админке и везде телефон должен поменяется, в случае с блоками как в статье поменяется телефон?
Мне лично не очень понятно зачем в самой статье телефон если он и так: "указан на странице контактов, и шапке сайта и в футере и еще где-нибудь", вывести переменую тупо кусочком кода: пхп
ну вобщем можно изголяться, но как вижу уже через токены сделал таки сойдет для сельской местности...
как телефон будет меняться в статьях? Они же его туда как <?php echo $var['phone'] ?> записать не могут, а если смогут то это угроза работы сайта
а вот в статье сделать так
по рекламациям звоните в отдел контроля формы картофеля <span><strong>[custom:phone]</strong></span></div>
смогут, если объяснить что вместо телефона надо вставлять [custom:phone], поймут же?
да, лучше всего, имхо
так же, через custom_token отдавать
variable_get($site_phone)
это же не только может быть телефон, а любая информация привязанная не к конкретной ноде или типу нод, а к сайту целиком (имя руководителя, адрес, ссылка на партнеров которые могут меняться, список телефонов — тут можно много примеров привести)
а давать возможность редакторам пользоваться php очень небезопасно, где-нибудь забудут ";" и сайт ляжет целиком т.к. ляжет интерпретатор
хорошая идея, логично что сущности привязанные к сайту буду расположены в "адимка-конфигурация-информация о сайте"
не подскажите теперь как добавить хуком еще одно поле к формк system-site-information-settings и писать его в variables?
таки своим модулем )
<?php
function имя-модуля_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'system-site-information-settings') { // уточнить имя формы!
$form['site_phone'] = array(
'#type' => 'textfield',
'#title' => t('Site phone'),
'#default_value' => variable_get('site_phone'),
);
}
}
?>
написал в сонном состоянии, сверяйтесь:
hook_form_alter
Form API
upd.
после сабмита формы надо будет записать значение телефона variable_set('site_phone', $form['site_phone']['#value']);
Если телефон нужно выводить только в шаблонах, то можно добавить ещё одну переменную в settings.php. Или сделать дополнительный интерфейс в админке.
Если кроме этого телефон нужно выводить в произвольном месте ноды или в содержимом собственных блоков, то токены действительно самый удобный вариант.
+++ к токенам, ибо давать редакторам PHP это отсроченное самоубийство
ТС молодец, рад что на д.ру есть люди, способные не ныть, задавать правильные вопросы, находить (по минимальным подсказкам) подходящие решения и вести диалог
А то, судя по последним дням, одни ламеры с гаврами заполонили сайт...