Задача с выводом в контент ноды переменной.

Главные вкладки

Аватар пользователя mihon_kri mihon_kri 29 октября 2014 в 14:00

Добрый день!
Поднимаю новый проект на drupal7. На сайте есть раздел новости. В админке сделан тип материала - новость с соответствующими полями. Нужно реализоввать следующее: при вводе менеджером контента (текста) новости сделать возможность добавления контактного телефона через переменную. Например, чтобы менеджер не вбивал рукам код города, номер телефона и т д, а просто вставил переменную (что то типа %phone% или $phone) в контент и при сохранении содержимого в этом месте появлялся номер телефона. Пробовал вывести переменную в контенте, но drupal выводит ошибку типа Notice: Undefined variable: variables в функции eval()(строка 2 в файле Z:\home\mysite\www\modules\php\php.module(80) : eval()'d code).
Каким путем можно реализовать данную задачу?

Комментарии

Аватар пользователя qwinto qwinto 29 октября 2014 в 14:48

я так и хотел предложить, но меня смутило - что не хочется вбивать номер...а если поле номера уже есть, тогда действительно через токен...

Аватар пользователя mihon_kri mihon_kri 30 октября 2014 в 0:01

qwinto wrote:
я так и хотел предложить, но меня смутило - что не хочется вбивать номер...а если поле номера уже есть, тогда действительно через токен...

Так и не разобрался, как ими (токенами) пользоваться(((( Уже и Custom Tokens модуль установил, создал токен по инструкции вот этой http://debuntu.ru/note/drupal-modul-custom-tokens , вроде всё понятно. Вставляю токен в содержимое и номер телефоне не отражается , а тупо отражается [custom:phone].((((( Может надо выводить как то определенным образом? Друзья, помогите! Очень нужно реализовать...

Аватар пользователя sergeybelya sergeybelya 30 октября 2014 в 0:18

mihon_kri wrote:
qwinto wrote:
я так и хотел предложить, но меня смутило - что не хочется вбивать номер...а если поле номера уже есть, тогда действительно через токен...

Так и не разобрался, как ими (токенами) пользоваться(((( Уже и Custom Tokens модуль установил, создал токен по инструкции вот этой http://debuntu.ru/note/drupal-modul-custom-tokens , вроде всё понятно. Вставляю токен в содержимое и номер телефоне не отражается , а тупо отражается [custom:phone].((((( Может надо выводить как то определенным образом? Друзья, помогите! Очень нужно реализовать...

https://www.drupal.org/project/token_filter

Аватар пользователя mihon_kri mihon_kri 29 октября 2014 в 17:45

Я с Drupal только начал работать. Можете пошагово объяснить как это сделать или на простом примере? Заранее спасибо!!!

Аватар пользователя qwinto qwinto 30 октября 2014 в 15:47

Вы напишите, что конкретно надо сделать, тогда легче описать решение...
В любом случае поле номера телефон надо заполнять, тогда все остальное через views.

Аватар пользователя mihon_kri mihon_kri 13 января 2015 в 15:44

qwinto wrote:
Вы напишите, что конкретно надо сделать, тогда легче описать решение...
В любом случае поле номера телефон надо заполнять, тогда все остальное через views.

Задача такая. На сайте есть разделы, доступные для контент-менеджера (Новости, статьи, акции...). Нужно, что бы в этих разделах менеджер добавляя к примеру новость в контенте новости мог вместо номера телефона указать метку (в данном случае я так понял, можно токен использовать), и в случае, если телефон изменился, то он изменился бы во всех местах сайта, где он был внесен в контент этми токенами, а так же желательно иметь возможность мне добавить эти токены в шаблоне (в шапке, подвале и на некоторых страницах). Задача заключается в том, чтоб через админку иметь возможность поменять телефон в одном месте, а в контенте он изменился бы везде, где он есть... Первоначально я решил эту проблему через модуль views сделав блок с телефоном и разместив его во всех нужных регионах и в отдельном поле в новости, но вот добавить в содержание его я не знал как. Вот и пришлось с токенами разбираться...

Аватар пользователя qwinto qwinto 30 октября 2014 в 16:30

Подождите, если номер телефона единый, тогда создать поле со значением по умолчанию, и никаких токенов не надо, выбрал поле во views, а значение уже есть.

Аватар пользователя mihon_kri mihon_kri 30 октября 2014 в 17:24

qwinto wrote:
Подождите, если номер телефона единый, тогда создать поле со значением по умолчанию, и никаких токенов не надо, выбрал поле во views, а значение уже есть.
Я наверное не совсем четко обозначил то, чего нужно достичь))) К примеру, пишет манагер новость и в её тексте хочет написать: "Это предложение действует до завтрашнего дня! Звоните по телефону: +7 (012) 345-67-89! Послезавтра предложение уже не действует!.... " В новости ему придется вбить телефон руками, а нужно, чтоб он просто вставил вместо телефона токен. Если через месяц он таких новостей штук сто наклепает и в тексте каждой будет телефон указывать, то при смене телефона нужно будет лопатить все новости и руками переправлять этот номер. А нужно, чтоб этот телефон можно было централизовано на сайте поменять, избежав при этом рутинной работы по поиску и замене номера телефона во всех новостях.

Аватар пользователя qwinto qwinto 30 октября 2014 в 22:49

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

Аватар пользователя Moel Moel 31 октября 2014 в 1:32

Можно модулек, создать страницу настройки типо поле телефон - забивается в variable. И можно кнопочку добавить на страницу редактирования + js который по нажатию этой кнопки вставляет например phone_var в body в месте курсора. И потом в этом же модуле hook_node_view с регуляркой и заменять phone_var на variable.

Аватар пользователя Orion76 Orion76 31 октября 2014 в 6:09

Модуль
https://www.drupal.org/project/token_var
позволяет использовать "глобальные переменные"(установленные функцией variable_set()) Drupal как токены .
Осталось только придумать, как по простому добавлять редактировать эти переменные.

Варианты навскидку:
1.Добавить в settings.php

<?php
$conf 
+= array(
'TEL_1' => '22-33-44',
);
?>

2. Добавить в template.php темы (THEME_page_preprocess)

<?php
variable_set
('TEL_1','22-33-44')
?>

3.Сделать форму в админке для ввода-редактирования переменных.
4.Возможно можно как-то rules приспособить, чтобы при сохранении некоторой ноды с полем-значением телефона, устанавливал нужную переменную значением этого поля.

......

Аватар пользователя mihon_kri mihon_kri 31 октября 2014 в 13:54

Спасибо всем! Попробую на выходных этот вопрос решить с помощью предложенных Вами вариантов! Отпишу о результатах, т к возможно кто то с такой же проблемой тоже столкнётся...

Аватар пользователя drupby drupby 31 октября 2014 в 17:17

да что же вы так извращаетесь с регулярками, препроцессами, переменными, человеку нужно простое решение, а простое было предложено ранее, с помощью custom tokens создать новый токен и записать в него значение, потом модуль token_filter поможет вставить этот токен в любое текстовое поле в нужном месте, только вот не забыть включить этот фильтр в настройках формата, через который выводится поле

Аватар пользователя mihon_kri mihon_kri 5 ноября 2014 в 13:34

К сожалению так и не получилось у меня ничего с токенами. Попробовал ещё раз с Custom Tokens создав пользовательский токен и скопировав его в текст ноды, но при выводе в ноде токена выводится сам токен [custom:phonenamber], а не его значение.(((( Причем в справке модуля Token на странице /admin/modules в разделе "пользовательские" я свой токен вижу. Следовательно он есть? Может я его копирую в текст ноды неверно?

Аватар пользователя mihon_kri mihon_kri 5 ноября 2014 в 13:38

Кстати не получается даже вставить токен такого плана [date:short], который как я понял в системе есть по умолчанию. Выводится опять же [date:short] , а не текущая дата.

Аватар пользователя drupby drupby 5 ноября 2014 в 14:52

"mihon_kri" wrote:
но при выводе в ноде токена выводится сам токен [custom:phonenamber], а не его значение.((((

"drupby" wrote:
потом модуль token_filter поможет вставить этот токен в любое текстовое поле в нужном месте, только вот не забыть включить этот фильтр в настройках формата, через который выводится поле

Аватар пользователя Orion76 Orion76 5 ноября 2014 в 15:47

"mihon_kri" wrote:
Кстати не получается даже вставить токен такого плана

"drupby" wrote:
потом модуль token_filter поможет вставить этот токен в любое текстовое поле в нужном месте, только вот не забыть включить этот фильтр в настройках формата, через который выводится поле

Не забыли ???

Аватар пользователя mihon_kri mihon_kri 5 ноября 2014 в 16:12

orion76 wrote:
"mihon_kri" wrote:
Кстати не получается даже вставить токен такого плана

"drupby" wrote:
потом модуль token_filter поможет вставить этот токен в любое текстовое поле в нужном месте, только вот не забыть включить этот фильтр в настройках формата, через который выводится поле

Не забыли ???


Так а где настройки формата находятся то? Можно скриншот для начинающих?)))

Аватар пользователя drupby drupby 5 ноября 2014 в 16:27

"mihon_kri" wrote:
Так а где настройки формата находятся то?

/admin/config/content/formats/full_html для Full HTML
/admin/config/content/formats/filtered_html для Filtered HTML

Аватар пользователя mihon_kri mihon_kri 5 ноября 2014 в 16:41

Всё заработало! Огромное спасибо за помощь! Вот блин, век живи, век учись и дураком помрешь!!! Это про меня!"!!!)))))