Всем привет!
Подскажите, как решить такую задачу. При написании комментария, а именно поля email, пользователь имел бы возможность выбрать - публиковать его email или оставить скрытым. Например, поставил галочку - значит емайл будет опубликован.
Как такое можно реализовать?
UPD: В общем, понятно, как что-то нестандартное - фиг кто поможет, а так все дартаньяны готовыми модулями жонглировать.
Сам решил вопрос. Если кому-то ещё будет нужно, вот мой костыльный рецепт:
- Создаём в полях комментариев поле для email и поле логическое "публиковать или нет".
- В отображении выводим наши поля на странице, каким угодно способом, лишь бы они выводились.
- А теперь скрываем их нафиг стилями - "display: none;". Скрываем не в форме ввода(это важно), а именно где выводятся комменты.
- Копируем в директорию вашей темы стандартный файл comment.tpl.php
У нас будет такой кусок кода:
<?php $mailtrue = $content['field__public_email'][0]['#markup'];
if ($mailtrue == 1) {
echo '<div class="field-label"><strong>Email:</strong></div>';
print_r($content['field_email_comment'][0]['#markup']);
}
?>
Сначала мы в переменную $mailtrue, кладём значение нашей логики. Машинное имя моего поля "field__public_email". Потом создаём условие, что когда наша переменная равна значению 1, т.е. true, тогда будет срабатывать код ниже, который выведет сам емайл. Не забудьте вставить своё значение поля емайл "field_email_comment".
Теперь этот код вставляем в нужное место файла comment.tpl.php, который мы уже положили в корень темы Drupal.
Вот пример:
<?php<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
<?php print $picture ?>
<?php if ($new): ?>
<span class="new"><?php print $new ?></span>
<?php endif; ?>
<?php print render($title_prefix); ?>
<h3<?php print $title_attributes; ?>><?php print $title ?></h3>
<?php print render($title_suffix); ?>
<div class="submitted">
<?php print $submitted; ?>
</div>
<div class="content"<?php print $content_attributes; ?>>
<?php $mailtrue = $content['field__public_email'][0]['#markup'];
if ($mailtrue == 1) {
echo '<div class="field-label"><strong>Email:</strong></div>';
print_r($content['field_email_comment'][0]['#markup']);
}
?>
<?php
// We hide the comments and links now so that we can render them later.
hide($content['links']);
print render($content);
?>
<?php if ($signature): ?>
<div class="user-signature clearfix">
<?php print $signature ?>
</div>
<?php endif; ?>
</div>
<?php print render($content['links']) ?>
</div>?>
Есть ещё нюанс. Может всё работать, но Drupal может выдавать всякую ахинею типо "notice undefined index блаблабла". Это лечится путём добавления в settings.php следующей строки:
ini_set('error_reporting', 'E_ALL ^ E_NOTICE');
Вот и всё. Надеюсь кому-то будет полезно.
Комментарии
в простом варианте стилем скрывать. в сложном надо скрипт аяксовый сделать.
Т.е. только через такие костыли? Нет никакого модуля или ещё какого функционала для этого?
запомните, друпал это не палочка выручалчка на все случаи жизни, это конструктор, в котором есть решения на обычные случаи жизни. Но для решения кастамных задач, нужно мозгами кумекать.
dgastudio, спасибо кэп.
Обновил пост. Сам решил вопрос.
ini_set('error_reporting', 'E_ALL ^ E_NOTICE'); - это гениально маэстро
Ну, а что ещё делать? Нашёл решение у иностранных коллег. Там какие-то плагины могут такую фигню выдавать. Т.е. это что-то вроде бага, этого быть не должно про индексы.
Это лечится путем добавления проверки