Exception Опубликовано 26 апреля, 2020 Поделиться Опубликовано 26 апреля, 2020 Может у кого есть наработки или кто-то знает как проще организовать древовидные комментарии (при ответе комментарий пользователя выводится под комментарием другого пользователя) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 28 апреля, 2020 Автор Поделиться Опубликовано 28 апреля, 2020 у меня есть комменты с $id - ид коммента, $pid - если комментарий - это ответ на родительский комментарий, сюда заносится $id родительского комментария, и $level - 0 если это корневой комментарий или 1 если это дочерний комментарий. Как теперь мне мне все отсортировать в древовидном порядке средствами ips, чтобы комментарии приняли вид: 1 comment ($id = 1; $pid = 0; $level = 0;) - 2 comment ($id = 2; $pid = 1; $level = 1;) - 3 comment ($id = 3; $pid = 1; $level = 1;) 4 comment ($id = 4; $pid = 0; $level = 0;) - 5 comment ($id = 5; $pid = 4; $level = 1;) - 6 comment ($id = 6; $pid = 4; $level = 1;) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 29 апреля, 2020 Автор Поделиться Опубликовано 29 апреля, 2020 жду вашей помощи 🤗 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 29 апреля, 2020 Автор Поделиться Опубликовано 29 апреля, 2020 вроде разобрался как вывести деревом. Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
andros0789 Опубликовано 29 апреля, 2020 Поделиться Опубликовано 29 апреля, 2020 1 час назад, ZIKURIK сказал: вроде разобрался как вывести деревом. Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место? она может быть внизу, просто отправка должна осуществляться именно к твоему 1 comment ($id = 1; $pid = 0; $level = 0;) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 29 апреля, 2020 Автор Поделиться Опубликовано 29 апреля, 2020 46 минут назад, andros0789 сказал: она может быть внизу, просто отправка должна осуществляться именно к твоему 1 comment ($id = 1; $pid = 0; $level = 0;) мысль не уловил. форма у меня должна показываться\переноситься под нужный мне комментарий для ответа, если она будет снизу, это не удобно для ответа и если форма снизу, то комментарий подгружается в самом низу, и встает на нужное место в дереве только после перезагрузки страницы Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
andros0789 Опубликовано 29 апреля, 2020 Поделиться Опубликовано 29 апреля, 2020 1 час назад, ZIKURIK сказал: мысль не уловил. форма у меня должна показываться\переноситься под нужный мне комментарий для ответа, если она будет снизу, это не удобно для ответа и если форма снизу, то комментарий подгружается в самом низу, и встает на нужное место в дереве только после перезагрузки страницы когда вы нажимаете цитировать или ответить, у вас происходит прокрутка до поля ввода сообщения , то есть вниз)Вот здесь как раз таки и вся суть моего поста выше)Чем неудобно оставить стандартное поле внизу, просто останется прокрутка вниз автоматическая, но сообщение будет подставляться к нужному комменту. Просто хочется увидеть что у вас получилось, может допишу то что начали вы, надо увидеть то что есть Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Estomel Опубликовано 31 января, 2021 Поделиться Опубликовано 31 января, 2021 В 29.04.2020 в 23:24, ZIKURIK сказал: вроде разобрался как вывести деревом. Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место? привет, тоже захотел древовидные комментарии и начал гуглить, наткнулся на эту тему, удалось реализовать? если да, сможете поделиться? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
andros0789 Опубликовано 31 января, 2021 Поделиться Опубликовано 31 января, 2021 2 часа назад, Estomel сказал: привет, тоже захотел древовидные комментарии и начал гуглить, наткнулся на эту тему, удалось реализовать? если да, сможете поделиться? Похоже нет)) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 6 апреля, 2021 Автор Поделиться Опубликовано 6 апреля, 2021 Вопрос к кодерам: какой класс\метод нужно захукать чтобы дополнительно отправить нужные данные например из <input type="hidden" name="idd" value="0"> в бд к добавляемому комменту? Коммент же method="post" отправляется на сервер, какой метод обрабатывает этот запрос и добавляет коммент в базу данных? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 6 апреля, 2021 Поделиться Опубликовано 6 апреля, 2021 Добавление коммента обрабатывает функция commentForm класса \IPS\Content\Item. В jquery это addToCommentFeed Судя по всему нужно создавать новый экземпляр редактора по клику на кнопку Ответить. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 6 апреля, 2021 Автор Поделиться Опубликовано 6 апреля, 2021 59 минут назад, Respected сказал: Добавление коммента обрабатывает функция commentForm класса \IPS\Content\Item. да до меня просто не доходит как это происходит, каким кодом будут забираться данные из поля <input type="hidden" name="idd" value="0"> //<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { exit; } abstract class hook33 extends _HOOK_CLASS_ { /** * Build comment form * * @param int|NULL $lastSeenId Last ID seen (point to start from for new comment polling) * @return string */ public function commentForm( $lastSeenId=NULL ) { return parent::commentForm( $lastSeenId ); if ( $this instanceof \IPS\cms\Records ) { //тут должен быть код который собирает данные и отправляет в бд? } } } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 8 апреля, 2021 Автор Поделиться Опубликовано 8 апреля, 2021 Есть какие соображения? Уверен тут есть человеки которые плагины\приложения пишут. Цитата Я так понял это _commentForm(), commentForm( $lastSeenId = NULL ), commentFormElements(), processCommentForm( $values ) но не могу понять какой код формирует данные из полей (эдитора и input hidden) и отправляет их в бд Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Respected Опубликовано 8 апреля, 2021 Поделиться Опубликовано 8 апреля, 2021 Это очень сложно, не так просто как кажется на первый взгляд. Нужно много времени на разработку и тестирование. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 10 апреля, 2021 Поделиться Опубликовано 10 апреля, 2021 Скрытые поля можно добавить в методе _commentForm. /** * Return the comment form object * * @return \IPS\Helpers\Form */ protected function _commentForm() { $form = parent::_commentForm(); $form->hiddenValues['key'] = 'value'; return $form; } Обрабатывать форму в методе processCommentForm. /** * Process the comment form * * @param array $values Array of $form values * @return \IPS\Content\Comment */ public function processCommentForm( $values ) { $comment = parent::processCommentForm( $values ); $comment->key = $values['key']; $comment->save(); return $comment; } Exception 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2021 Автор Поделиться Опубликовано 10 апреля, 2021 11 часов назад, WaNted сказал: Скрытые поля можно добавить в методе _commentForm. /** * Return the comment form object * * @return \IPS\Helpers\Form */ protected function _commentForm() { $form = parent::_commentForm(); $form->hiddenValues['key'] = 'value'; return $form; } Обрабатывать форму в методе processCommentForm. /** * Process the comment form * * @param array $values Array of $form values * @return \IPS\Content\Comment */ public function processCommentForm( $values ) { $comment = parent::processCommentForm( $values ); $comment->key = $values['key']; $comment->save(); return $comment; } почему то если присвоить так $form->hiddenValues['key'] = '0'; то при отправки коммента он и считает это значение и запишет 0, хотя я контроллером изменяю input значение value например на 20, все равно отправляет 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 10 апреля, 2021 Поделиться Опубликовано 10 апреля, 2021 Тогда попробуйте получать значение с помощью \IPS\Request::i()->key. Если тоже вернёт изначально установленное значение, то попробуйте указывать скрытое поле в шаблоне. Exception 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2021 Автор Поделиться Опубликовано 10 апреля, 2021 (изменено) 4 минуты назад, WaNted сказал: Тогда попробуйте получать значение с помощью \IPS\Request::i()->key. Если тоже вернёт изначально установленное значение, то попробуйте указывать скрытое поле в шаблоне. \IPS\Request::i()->key да, так принял правильное значение. В чем может быть проблема первого метода? Изменено 10 апреля, 2021 пользователем ZIKURIK Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 10 апреля, 2021 Поделиться Опубликовано 10 апреля, 2021 Нет никакой проблемы, может просто в обработчике формы не предусмотрено изменение скрытых полей на фронте. Сейчас не у компа, можете сами посмотреть это в \IPS\Helpers\Form метод values. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2021 Автор Поделиться Опубликовано 10 апреля, 2021 24 минуты назад, WaNted сказал: Нет никакой проблемы, может просто в обработчике формы не предусмотрено изменение скрытых полей на фронте. Сейчас не у компа, можете сами посмотреть это в \IPS\Helpers\Form метод values. там походу только тоглы передаются togglesOn / togglesOff / toggles т.е. работает только с формами new \IPS\Helpers\Form... я так понял Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2021 Автор Поделиться Опубликовано 10 апреля, 2021 и безопасно ли так записывать в бд через \IPS\Request::i()->key ? Хотя в любом случае мне придется делать проверку т.к. в бд принимаются только int значения Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 10 апреля, 2021 Автор Поделиться Опубликовано 10 апреля, 2021 WaNted спасибо за помощь, буду пилить дальше. Вот что пока что вышло: Спойлер BlackShot и WaNted 2 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 18 апреля, 2021 Автор Поделиться Опубликовано 18 апреля, 2021 (изменено) есть такая итерация: foreach ( $this->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) as $LoadComment ) и у меня есть массив с определенными id, нужно во время итерации собирать только те comments id которых нету в моем массиве, как такое организовать ? Я могу сравнить их после функцией !\in_array(), но мне нужно сделать это внутри $this->comments() чтобы сразу отсечь ненужные comments Изменено 18 апреля, 2021 пользователем ZIKURIK Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 19 апреля, 2021 Поделиться Опубликовано 19 апреля, 2021 $сommentIds = array( 1, 2, 3 ); foreach ( $this->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, array( array( \IPS\Db::i()->in( 'comment_id', $сommentIds, TRUE ) ) ), FALSE, isset( \IPS\Request::i()->showDeleted ) ) as $LoadComment ) Exception 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Exception Опубликовано 19 апреля, 2021 Автор Поделиться Опубликовано 19 апреля, 2021 (изменено) 12 часов назад, WaNted сказал: $сommentIds = array( 1, 2, 3 ); foreach ( $this->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, array( array( \IPS\Db::i()->in( 'comment_id', $сommentIds, TRUE ) ) ), FALSE, isset( \IPS\Request::i()->showDeleted ) ) as $LoadComment ) сидел думал чтобы такое вставить в where, видимо проглядел про \IPS\Db::i()->in . Спасибо Изменено 19 апреля, 2021 пользователем ZIKURIK Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.