Логика публикации email в комментах

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

Аватар пользователя 88a88 88a88 24 сентября 2016 в 16:27

Всем привет!

Подскажите, как решить такую задачу. При написании комментария, а именно поля 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 dgastudio 25 сентября 2016 в 9:36

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

Аватар пользователя 88a88 88a88 8 октября 2016 в 23:29

Ну, а что ещё делать? Нашёл решение у иностранных коллег. Там какие-то плагины могут такую фигню выдавать. Т.е. это что-то вроде бага, этого быть не должно про индексы.