Дополнительные поля в DLE комментариях
10 октября 2009 Автор: Zver
Прокомментировать

Данный блог сделан на DLE. Мне эта CMS очень нравится, хотя иногда я бывает и жалею что сделал блог на DLE, но это только иногда!
Понятно что DLE это портальная CMS, а для блога нужно что-нибудь другое, WordPress и т.д. Я хочу сказать, что много того, что должно быть на блоге, и есть в WordPress, нет на DLE.
При создании этого блога я также столкнулся с рядом проблем. Первой проблемой были комментарии.
В форме добавления комментариев были только поля "Имя", "E-mail" и "Текст комментария" - не хватало поля "Сайт", функция которого мотивировать читателей оставить комментарий к тому или иному посту, ведь появится ещё одна ссылка на его блог либо сайт. Ну и что что ссылка с nofollow и noindex, главное что она есть и будет.
Вернусь к теме добавления дополнительных полей в форму добавления комментариев. Сразу скажу что сложного здесь ничего нет, необходимо лишь отредактировать некоторые файлы DLE CMS.
Перед тем как приступить к редактированию файлов, советую сделать backup базы данных и изменяемых ниже файлов, мало ли...
Первое что нужно сделать, это добавить в базу данных(а именно в таблицу dle_comments) поле url, в котором будут храниться ссылки на сайты комментаторов.
Для добавления поле url в БД зайдите в phpMyAdmin, выберите базу данных вашего блога(сайта) и в списке таблиц, который находится слева, выберите таблицу dle_comments. В центральной колонке появится список полей таблицы dle_comments, а чуть ниже форма для добавления нового поля. Пишем, что нужно добавить 1 поле, ставим отметку на "после", и выбираем "email", жмём на кнопку "Ок".
После нажатия кнопки "Ок" нужно заполнить форму добавления нового поля данными:
Поле - url
Тип - VARCHAR
Длины/Значение - 100
Дальше заполнять ничего не нужно, жмите на кнопку "Сохранить".
Можно сделать ещё проще, открыв нужную базу данных в phpMyAdmin, и воспользовавшись вкладкой SQL выполнить следующий запрос:
ALTER TABLE `dle_comments` ADD `url` VARCHAR(100) NOT NULL AFTER `email`;
Если никаких ошибок и предупреждений не появилось, значит запрос отправлен удачно и поле url создано.
Теперь давайте приступим к редактированию самих файлов DLE CMS:
1. Откройте в NotePad++, Macromedia Dreamweaver или в Блокноте файл engine/modules/addcomments.php и воспользовавшись поиском редактора, либо вручную, найдите строку:
$mail = $db->safesql( $parse->process( trim( $_POST['mail'] ) ) );
И после неё вставьте:
$url = $db->safesql( $parse->process( trim( $_POST['url'] ) ) );
В этом же файле найдите строку:
$mail = $member_id['email'];
И после неё вставьте:
$url = $member_id['url'];
Здесь же ищите:
if( strlen( $mail ) > 50 and ! $is_logged ) {
$stop[] = $lang['news_err_2'];
$CN_HALT = TRUE;
}Ниже вставьте:
if( strlen( $url ) > 50 and ! $is_logged ) {
$stop[] = "В поле \"Сайт\" введено неверное значение.";
$CN_HALT = TRUE;
}И после:
if( $mail != "" ) {
if( !preg_match( "/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $mail ) ) {
$stop[] = $lang['news_err_10'];
$CN_HALT = TRUE;
}
}Вставьте:
if( $url != "" ) {
if( !preg_match( "/((http(s?):\/\/)|(www\.))([\w\.]+)([\/\w+\.-?]+)/", $url ) ) {
$url = "http://".$url;
}
}В этом же файле найдите строки:
if( $is_logged ) $db->query( "INSERT INTO " . PREFIX . "_comments (post_id, user_id, date, autor, email, text, ip, is_register, approve) values ('$post_id', '$member_id[user_id]', '$time', '$name', '$mail', '$comments', '$_IP', '1', '$where_approve')" );
else $db->query( "INSERT INTO " . PREFIX . "_comments (post_id, date, autor, email, text, ip, is_register, approve) values ('$post_id', '$time', '$name', '$mail', '$comments', '$_IP', '0', '$where_approve')" );И замените их на:
if( $is_logged ) $db->query( "INSERT INTO " . PREFIX . "_comments (post_id, user_id, date, autor, email, text, ip, is_register, approve) values ('$post_id', '$member_id[user_id]', '$time', '$name', '$mail', '$comments', '$_IP', '1', '$where_approve')" );
else $db->query( "INSERT INTO " . PREFIX . "_comments (post_id, date, autor, email, url, text, ip, is_register, approve) values ('$post_id', '$time', '$name', '$mail', '$url', '$comments', '$_IP', '0', '$where_approve')" );2. Сохраните изменения в файле addcomments.php, после чего откройте файл engine/modules/show.full.php, найдите в нём следующие строки:
$comments->query = "SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, name, " . USERPREFIX . "_users.email, news_num, comm_num, user_group, reg_date, signature, foto, fullname, land, icq, xfields FROM " . PREFIX . "_comments LEFT JOIN " . USERPREFIX . "_users ON " . PREFIX . "_comments.user_id=" . USERPREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id'" . $where_approve . " ORDER BY date " . $config['comm_msort'];
Замените на:
$comments->query = "SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, url, text, ip, is_register, name, " . USERPREFIX . "_users.email, news_num, comm_num, user_group, reg_date, signature, foto, fullname, land, icq, xfields FROM " . PREFIX . "_comments LEFT JOIN " . USERPREFIX . "_users ON " . PREFIX . "_comments.user_id=" . USERPREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id'" . $where_approve . " ORDER BY date " . $config['comm_msort'];
3. Сохраните изменения в файле show.full.php. Откройте файл engine/classes/comments.class.php, найдите в нём строку:
$row['gast_email'] = stripslashes( $row['gast_email'] );
После которой вставьте:
$row['url'] = stripslashes( $row['url'] );
В этом же файле найдите:
if( $row['gast_email'] != "" ) {
$tpl->set( '{author}', "<a href=\"mailto:".htmlspecialchars($row['gast_email'], ENT_QUOTES)."\">" . $row['gast_name'] . "</a>" );
} else {
$tpl->set( '{author}', $row['gast_name'] );
}И замените на:
if( $row['url'] != "" ) {
$tpl->set( '{author}', "<a href=\"".htmlspecialchars($row['url'], ENT_QUOTES)."\" target=\"_blank\">" . $row['gast_name'] . "</a>" );
} else {
$tpl->set( '{author}', $row['gast_name'] );
}3. Откройте файл вашего шаблона addcomments.tpl, и в нужное место, где должно отображаться поле "Сайт", вставьте:
<p><input type="text" name="url" id="url" size="22" /> Сайт</p>
Ну вот и всё, теперь у вас в форме добавления комментариев будет поле "Сайт". После добавления кем-нибудь комментария, его ник(имя) будет служить ссылкой на его блог(сайт). Также необходимо обрамить данную ссылку в noindex и nofollow, но это уже сами, если не получится - пишите в комментариях, объясню как это сделать.
Единственный минус данного хака, это то что если ваши комментаторы будут вписывать в поле "Сайт" ссылки без http://, то их ссылки будут неправильно отображаться, а это не есть хорошо.
Так же необходимо отключить AJAX комментирование, иначе хак работать не будет.
С этими двумя проблемами я пока не разобрался, если есть желающие помочь - буду очень благодарен и дополню пост, с ссылкой на вас.
С уважением, Евгений
Не забывайте подписываться на блог, а также присоединяйтесь ко мне в следующих социальных сервисах:
Метки: DLE, Хаки
Категории: CMS » DataLife Engine Просмотров: 2233
Категории: CMS » DataLife Engine Просмотров: 2233


