На одном из сайтов понадобилось добавить второй буквенный каталог, по которому в дальнейшем будет идти сортировка новостей. Но вставлять в каждой новости вручную эти две буквы занимает много времени. Разработал хак, автоматизирующий этот процесс. Первую букву будет брать на основе данных из доп поля с оригинальным/анлийским/японским/прочим языком, вторую же будет брать на основе доп поля с русским названием новости. Установка легкая, занимает пару минут. Приступим?
1. Автор PunPun . Открываем /engine/engine.php и находим код :
ЗАМЕНЯЕМ на код
2. Автор Я, DomiTori . Открываем /engine/modules/show.full.php и ищем в нем код:
ниже вставляем код
В коде, который вставили выше name_original - заменяем на латинское название доп поля, в котором содержится название новости (фильма, сериала) на "нерусском", а также name_russian - заменяем на латинское название доп поля, в котором содержится название новости (фильма, сериала) на русском.
Хак сработает так: при входе в полную новость будет проверятся не пустая ли ячейка с символом, если пустая то будет заполняться данными из доп полей.
Что делать если я парсером уже заполнял символ, как использовать этот хак?
- Идем в админку-редактирование новостей-выделить все новости. Далее выбераем в списке массовых действий пункт "Изменить символьный код". Жмем "Выполнить". Оставляем поле с символьным кодом пустое, жмем сохранить. Так проделываем для всех новостей.
И что будет, когда я установлю этот хак?
- Раньше, из коробки, была доступна сортировка по самой первой букве из тайтла новости. Теперь сортировки будет две, по первой букве англ. названия и по первой букве русского названия. К примеру мы добавили фильм "Терминатор / Terminator". Мы сможет отсортировать новости так
На пиво и чипсы можно отблагодарить рублем на вебмани.
1. Автор PunPun . Открываем /engine/engine.php и находим код :
PHP:
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}symbol = '$catalog' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}symbol = '$catalog' AND approve=1" . $where_date;
PHP:
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}symbol REGEXP '[[:<:]]($catalog)[[:>:]]' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}symbol REGEXP '[[:<:]]($catalog)[[:>:]]' AND approve=1" . $where_date;
PHP:
$tpl->set( '{full-story}', $row['full_story'] );
PHP:
if (!$row['symbol'] AND $xfieldsdata['name_original'] AND $xfieldsdata['name_russian'] ) {
$new_symbol = mb_strtolower(dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $xfieldsdata['name_original'] ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] )) . "|" . mb_strtolower(dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $xfieldsdata['name_russian'] ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] ));
$db->query( "UPDATE " . PREFIX . "_post SET symbol='$new_symbol' WHERE id='{$newsid}'");
}
elseif (!$row['symbol'] AND !$xfieldsdata['name_original'] ) {
$new_symbol = mb_strtolower(dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $xfieldsdata['name_russian'] ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] ));
$db->query( "UPDATE " . PREFIX . "_post SET symbol='$new_symbol' WHERE id='{$newsid}'");
}
elseif (!$row['symbol'] AND !$xfieldsdata['name_russian'] ) {
$new_symbol = mb_strtolower(dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $xfieldsdata['name_original'] ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] ));
$db->query( "UPDATE " . PREFIX . "_post SET symbol='$new_symbol' WHERE id='{$newsid}'");
}
Хак сработает так: при входе в полную новость будет проверятся не пустая ли ячейка с символом, если пустая то будет заполняться данными из доп полей.
Что делать если я парсером уже заполнял символ, как использовать этот хак?
- Идем в админку-редактирование новостей-выделить все новости. Далее выбераем в списке массовых действий пункт "Изменить символьный код". Жмем "Выполнить". Оставляем поле с символьным кодом пустое, жмем сохранить. Так проделываем для всех новостей.
И что будет, когда я установлю этот хак?
- Раньше, из коробки, была доступна сортировка по самой первой букве из тайтла новости. Теперь сортировки будет две, по первой букве англ. названия и по первой букве русского названия. К примеру мы добавили фильм "Терминатор / Terminator". Мы сможет отсортировать новости так
и таксайт.ру/catalog/т/
сайт.ру/catalog/t/
На пиво и чипсы можно отблагодарить рублем на вебмани.
R417794992142
Z244912848144
U357368699010
Последнее редактирование:

