Хоббит 35 Опубликовано: 2 мая 2020 Рассказать Опубликовано: 2 мая 2020 Проблема: Пользователь переходит на коммент №32 с блока / страницы последних комментов, и когда попадает в страницу новости не может найти нужный коммент, потому что нужный коммент находится в 3 странице (https://site.com/page,1,3,89602-news.html#comment). Задача: Надо чтобы плагин правильно до конца / до нужной страницы доставлял пользователя. Также надо учесть динамическую загрузку комментов. DLE 13.3 & 14. Цена · Срок реализаций. Цитата Ссылка на сообщение Поделиться на других сайтах
NlCKRUS 48 Опубликовано: 8 мая 2020 Рассказать Опубликовано: 8 мая 2020 присоединяюсь. можно на двоих сумму разбить ) 1 Цитата Ссылка на сообщение Поделиться на других сайтах
dimitron 34 Опубликовано: 12 мая 2020 Рассказать Опубликовано: 12 мая 2020 Берусь за задачу 1 Цитата Ссылка на сообщение Поделиться на других сайтах
dimitron 34 Опубликовано: 13 мая 2020 Рассказать Опубликовано: 13 мая 2020 Сделал телепорт к нужному коменту. Только к каждому коменту дополнительный запрос в БД используеться. Нужно сделать следующее: 1) создать файл engine/modules/teleport/functions.php код файла: <?php //Формируем дерево коментов function buildTree(array &$elements, $parent = 0) { $branch = array(); foreach ($elements as $element) { if ($element['parent'] == $parent) { $children = buildTree($elements, $element['id']); if (!empty($children)) { $element['children'] = $children; } $branch[$element['id']] = $element; unset($elements[$element['id']]); } } return $branch; } //Вытягиваем ID комментов которые относятся к комменту function getIdComments($str, $array) { if (!empty($array['children'])) { foreach ($array['children'] as $value) { $str .= getIdComments(','.$value['id'], $value); } } return $str; } function getFullLink($post) { global $db, $config; //Вытягиваем все комменты новости $sql_comments = $db->query("SELECT * FROM " . PREFIX . "_comments WHERE post_id='{$post['post_id']}' "); $list_comments = []; while ($row = $db->get_row($sql_comments)) { $list_comments[$row['id']] = $row; } $list_comments = buildTree($list_comments); //вытаскиваем все ID $comments_ids = []; foreach ($list_comments as $value) { $comments_ids[] = getIdComments($value['id'], $value); } //Формируем id комментов по страницам $count_com = 2; $count_coms = count($list_comments); $pages = @ceil($count_coms / $count_com); $pages_ = []; for ($i = 1; $i <= $pages; $i++) { $count = 1; foreach ($comments_ids as $key => $value) { $pages_[$i][] = $value; unset($comments_ids[$key]); if ($count == $count_com) break; $count++; } $pages_[$i] = explode(',', implode(',', $pages_[$i])); } //Определяем на какой странице находиться комментарий $page_num = null; foreach ($pages_ as $key => $value) { if (in_array($post['id'], $value)) { $page_num = $key; break; } } //Генерируем ссылку на телепорт к коменту $teleport = !empty($page_num) ? "page,1,{$page_num}," : ""; $teleport_c = !empty($page_num) ? "cstart={$page_num}&" : ""; $teleport_ = !empty($page_num) ? "#comment-id-{$post['id']}" : ""; if ($config['allow_alt_url']) { if ($config['seo_type'] == 1 or $config['seo_type'] == 2) { if ($row['category'] and $config['seo_type'] == 2) { $full_link = $config['http_home_url'] . get_url($post['category']) . "/{$teleport}" . $post['post_id'] . "-" . $post['alt_name'] . ".html{$teleport_}"; } else { $full_link = $config['http_home_url'] . $teleport . $post['post_id'] . "-" . $post['alt_name'] . ".html{$teleport_}"; } } else { $full_link = $config['http_home_url'] . date('Y/m/d/', $post['newsdate']) . $teleport . $post['alt_name'] . ".html{$teleport_}"; } } else { $full_link = $config['http_home_url'] . "index.php?{$teleport_c}newsid=" . $post['post_id'] . $teleport_; } return $full_link; } 2) В файле engine/modules/functions.php найти: if (!function_exists('password_hash')) { добавить выше include (ENGINE_DIR . '/modules/teleport/functions.php'); 3) В файле engine/classes/comments.class.php найти: $tpl->set( '{news-link}', $full_link."#comment" ); заменить на $tpl->set( '{news-link}', getFullLink($row) ); Вот в принцепе и все. Проверил, работает на всех типах ЧПУ. Тестировал на CMS DLE 14.0 1 Цитата Ссылка на сообщение Поделиться на других сайтах
crafic 32 Опубликовано: 15 мая 2020 Рассказать Опубликовано: 15 мая 2020 те кто так нуждались в случае работоспособности не забудьте рассчитаться с dimitron Цитата Ссылка на сообщение Поделиться на других сайтах
Хоббит 35 Опубликовано: 17 мая 2020 Рассказать Опубликовано: 17 мая 2020 Автор В 13.05.2020 в 23:46, dimitron сказал: Сделал телепорт к нужному коменту. Только к каждому коменту дополнительный запрос в БД используеться. ...... Вот в принцепе и все. Проверил, работает на всех типах ЧПУ. Тестировал на CMS DLE 14.0 Оставьте тут кошелек, или ссылку на оплату Яндекса Цитата Ссылка на сообщение Поделиться на других сайтах
Хоббит 35 Опубликовано: 17 мая 2020 Рассказать Опубликовано: 17 мая 2020 Автор Не работает с количеством комментов, допустим у меня 7 комментов в настройках и ответы к ним (древо=3), если я напишу ответ на коммент в 9 странице, то в ссылка будет: /page,1,14,151-news.html#comment-id-1582 В то время у меня только 10 страниц. DLE 13.3. Цитата Ссылка на сообщение Поделиться на других сайтах
dimitron 34 Опубликовано: 18 мая 2020 Рассказать Опубликовано: 18 мая 2020 Немного поправил код файла (engine/modules/teleport/functions.php). ВНИМАНИЕ!!! тестировал на версии dle 14.0. И этот хак работает только для кастомного тега {customcomments} <?php //Формируем дерево коментов function buildTree(array &$elements, $parent = 0) { $branch = array(); foreach ($elements as $element) { if ($element['parent'] == $parent) { $children = buildTree($elements, $element['id']); if (!empty($children)) { $element['children'] = $children; } $branch[$element['id']] = $element; unset($elements[$element['id']]); } } return $branch; } //Вытягиваем ID комментов которые относятся к комменту function getIdComments($str, $array) { if (!empty($array['children'])) { foreach ($array['children'] as $value) { $str .= getIdComments(','.$value['id'], $value); } } return $str; } function getFullLink($post) { global $db, $config; //Вытягиваем все комменты новости $sql_comments = $db->query("SELECT * FROM " . PREFIX . "_comments WHERE post_id='{$post['post_id']}' "); $list_comments = []; while ($row = $db->get_row($sql_comments)) { $list_comments[$row['id']] = $row; } $list_comments = buildTree($list_comments); //вытаскиваем все ID $comments_ids = []; foreach ($list_comments as $value) { $comments_ids[] = getIdComments($value['id'], $value); } //Формируем id комментов по страницам $count_com = $config['comm_nummers']; $count_coms = count($list_comments); $pages = @ceil($count_coms / $count_com); $pages_ = []; for ($i = 1; $i <= $pages; $i++) { $count = 1; foreach ($comments_ids as $key => $value) { $pages_[$i][] = $value; unset($comments_ids[$key]); if ($count == $count_com) break; $count++; } $pages_[$i] = explode(',', implode(',', $pages_[$i])); } //Определяем на какой странице находиться комментарий $page_num = null; if(count($pages_) > 1) { foreach ($pages_ as $key => $value) { if (in_array($post['id'], $value)) { $page_num = $key; break; } } } //Генерируем ссылку на телепорт к коменту $teleport = !empty($page_num) ? "page,1,{$page_num}," : ""; $teleport_c = !empty($page_num) ? "cstart={$page_num}&" : ""; $teleport_ = "#comment-id-{$post['id']}"; if ($config['allow_alt_url']) { if ($config['seo_type'] == 1 or $config['seo_type'] == 2) { if ($row['category'] and $config['seo_type'] == 2) { $full_link = $config['http_home_url'] . get_url($post['category']) . "/{$teleport}" . $post['post_id'] . "-" . $post['alt_name'] . ".html{$teleport_}"; } else { $full_link = $config['http_home_url'] . $teleport . $post['post_id'] . "-" . $post['alt_name'] . ".html{$teleport_}"; } } else { $full_link = $config['http_home_url'] . date('Y/m/d/', $post['newsdate']) . $teleport . $post['alt_name'] . ".html{$teleport_}"; } } else { $full_link = $config['http_home_url'] . "index.php?{$teleport_c}newsid=" . $post['post_id'] . $teleport_; } return $full_link; } 1 Цитата Ссылка на сообщение Поделиться на других сайтах
dimitron 34 Опубликовано: 18 мая 2020 Рассказать Опубликовано: 18 мая 2020 (изменено) Если реально мой код комуто подошол я не буду прям настаивать на какойто цене 😉 Рекизиты: WebMoney Z180611042436 Изменено 18 мая 2020 пользователем dimitron 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.