JComments

Как добавить дополнительное поле в JComments

На форуме часто спрашивают, как в форму комментария добавить дополнительное поле, в которое пользователи смогли бы вводить некоторую информацию. Делать из компонента комментариев кухонный комбайн не хочется, но раз вопрос такой популярный - объясню, как это сделать малой кровью.

Давайте добавим два дополнительных поля в форму комментариев: Town (Город) и AcceptTerms (Согласен с правилами). Первое поле будет обычным текстовым, а второе будет принимать значения 1 или 0, т.е. пользователю нужно будет поставить галочку.

  1. Добавляем новые поля в таблицу jos_jcomments следующими SQL-запросами:
    ALTER TABLE jos_jcomments ADD COLUMN `town` varchar(255);
    и
    ALTER TABLE jos_jcomments ADD COLUMN `acceptterms` tinyint(1) DEFAULT 0;
  2. Открываем файл jcomments.class.php и добавляем данные поля в класс JCommentsDB, например после строчки:
      var $editor = '';
    т.е. у нас получится вот так:
      var $editor = '';
      var $town = '';
      var $acceptterms = '';
  3. Открываем файл jcomments.ajax.php и после строчки:
    $comment->userid = $my->id ? $my->id : 0;
    добавляем еще 2:
    $comment->town = isset($values['town']) ? $values['town'] : '';
    $comment->acceptterms = isset($values['acceptterms']) ? $values['acceptterms'] : 0;
  4. Открываем файл /tpl/default/tpl_form.php и перед строчками:
    <p>
      <textarea id="comments-form-comment" name="comment" cols="65" rows="8" tabindex="5"></textarea>
    </p>
    Добавляем наши новые поля:
     
    <p>
      <input type="text" name="town" value="" id="comments-form-town" />
      <label for="comments-form-town">Town</label>
    </p>
    <p>
      <input type="checkbox" name="acceptterms" value="1" id="comments-form-acceptterms" />
      <label for="comments-form-acceptterms">Accept Terms of Use</label>
    </p>

Все, на этом первая (и основная) часть процесса добавления двух дополнительных полей решена. В результате проделанной модификации в форме добавления комментариев появятся 2 новых поля, которые после отправки комментария будут сохраняться в БД.

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

  1. Открываем файл jcomments.php, находим в нем строчку:
    $query = "SELECT c.id, c.object_id, c.object_group, c.userid, c.name, c.username, c.title, c.comment"
    и заменяем ее на:
    $query = "SELECT c.id, c.object_id, c.object_group, c.userid, c.name, c.username, c.title, c.comment, c.town, c.acceptterms"
    Этим самым мы добавляем выборку информации по данным полям из БД.
  2. Теперь открываем файл шаблона: /tpl/default/tpl_comment.php и допустим после строчки:
    <span class="comment-date"><?php echo date( 'Y-m-d H:i', $comment->datetime); ?></span>
    добавляем вывод нашей информации:
     
    <span class="comment-town"><?php echo $comment->town; ?></span>
    <span class="comment-accept"><?php echo $comment->acceptterms ? 'Accepted' : 'Not accepted'; ?></span>

Вот собственно и все. Ничего сложного, как видите, здесь нет. Единственная проблема — при каждом обновлении компонента вам придется повторять данную процедуру.

 
JoomlaTune