Posted 26 апреля, 20204 yr comment_161852 Может у кого есть наработки или кто-то знает как проще организовать древовидные комментарии (при ответе комментарий пользователя выводится под комментарием другого пользователя)
28 апреля, 20204 yr Author comment_161857 у меня есть комменты с $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;)
29 апреля, 20204 yr Author comment_161865 вроде разобрался как вывести деревом. Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место?
29 апреля, 20204 yr comment_161866 1 час назад, ZIKURIK сказал: вроде разобрался как вывести деревом. Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место? она может быть внизу, просто отправка должна осуществляться именно к твоему 1 comment ($id = 1; $pid = 0; $level = 0;)
29 апреля, 20204 yr Author comment_161868 46 минут назад, andros0789 сказал: она может быть внизу, просто отправка должна осуществляться именно к твоему 1 comment ($id = 1; $pid = 0; $level = 0;) мысль не уловил. форма у меня должна показываться\переноситься под нужный мне комментарий для ответа, если она будет снизу, это не удобно для ответа и если форма снизу, то комментарий подгружается в самом низу, и встает на нужное место в дереве только после перезагрузки страницы
29 апреля, 20204 yr comment_161869 1 час назад, ZIKURIK сказал: мысль не уловил. форма у меня должна показываться\переноситься под нужный мне комментарий для ответа, если она будет снизу, это не удобно для ответа и если форма снизу, то комментарий подгружается в самом низу, и встает на нужное место в дереве только после перезагрузки страницы когда вы нажимаете цитировать или ответить, у вас происходит прокрутка до поля ввода сообщения , то есть вниз)Вот здесь как раз таки и вся суть моего поста выше)Чем неудобно оставить стандартное поле внизу, просто останется прокрутка вниз автоматическая, но сообщение будет подставляться к нужному комменту. Просто хочется увидеть что у вас получилось, может допишу то что начали вы, надо увидеть то что есть
31 января, 20213 yr comment_167473 В 29.04.2020 в 23:24, ZIKURIK сказал: вроде разобрался как вывести деревом. Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место? привет, тоже захотел древовидные комментарии и начал гуглить, наткнулся на эту тему, удалось реализовать? если да, сможете поделиться?
31 января, 20213 yr comment_167477 2 часа назад, Estomel сказал: привет, тоже захотел древовидные комментарии и начал гуглить, наткнулся на эту тему, удалось реализовать? если да, сможете поделиться? Похоже нет))
6 апреля, 20213 yr Author comment_168798 Вопрос к кодерам: какой класс\метод нужно захукать чтобы дополнительно отправить нужные данные например из <input type="hidden" name="idd" value="0"> в бд к добавляемому комменту? Коммент же method="post" отправляется на сервер, какой метод обрабатывает этот запрос и добавляет коммент в базу данных?
6 апреля, 20213 yr comment_168799 Добавление коммента обрабатывает функция commentForm класса \IPS\Content\Item. В jquery это addToCommentFeed Судя по всему нужно создавать новый экземпляр редактора по клику на кнопку Ответить.
6 апреля, 20213 yr Author comment_168800 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 ) { //тут должен быть код который собирает данные и отправляет в бд? } } }
8 апреля, 20213 yr Author comment_168820 Есть какие соображения? Уверен тут есть человеки которые плагины\приложения пишут. Цитата Я так понял это _commentForm(), commentForm( $lastSeenId = NULL ), commentFormElements(), processCommentForm( $values ) но не могу понять какой код формирует данные из полей (эдитора и input hidden) и отправляет их в бд
8 апреля, 20213 yr comment_168823 Это очень сложно, не так просто как кажется на первый взгляд. Нужно много времени на разработку и тестирование.
10 апреля, 20213 yr comment_168860 Скрытые поля можно добавить в методе _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; }
10 апреля, 20213 yr Author comment_168870 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
10 апреля, 20213 yr comment_168871 Тогда попробуйте получать значение с помощью \IPS\Request::i()->key. Если тоже вернёт изначально установленное значение, то попробуйте указывать скрытое поле в шаблоне.
10 апреля, 20213 yr Author comment_168872 4 минуты назад, WaNted сказал: Тогда попробуйте получать значение с помощью \IPS\Request::i()->key. Если тоже вернёт изначально установленное значение, то попробуйте указывать скрытое поле в шаблоне. \IPS\Request::i()->key да, так принял правильное значение. В чем может быть проблема первого метода? Edited 10 апреля, 20213 yr by ZIKURIK
10 апреля, 20213 yr comment_168873 Нет никакой проблемы, может просто в обработчике формы не предусмотрено изменение скрытых полей на фронте. Сейчас не у компа, можете сами посмотреть это в \IPS\Helpers\Form метод values.
10 апреля, 20213 yr Author comment_168876 24 минуты назад, WaNted сказал: Нет никакой проблемы, может просто в обработчике формы не предусмотрено изменение скрытых полей на фронте. Сейчас не у компа, можете сами посмотреть это в \IPS\Helpers\Form метод values. там походу только тоглы передаются togglesOn / togglesOff / toggles т.е. работает только с формами new \IPS\Helpers\Form... я так понял
10 апреля, 20213 yr Author comment_168877 и безопасно ли так записывать в бд через \IPS\Request::i()->key ? Хотя в любом случае мне придется делать проверку т.к. в бд принимаются только int значения
10 апреля, 20213 yr Author comment_168878 WaNted спасибо за помощь, буду пилить дальше. Вот что пока что вышло: Спойлер
18 апреля, 20213 yr Author comment_169025 есть такая итерация: 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 Edited 18 апреля, 20213 yr by ZIKURIK
19 апреля, 20213 yr comment_169026 $с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 )
19 апреля, 20213 yr Author comment_169030 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 . Спасибо Edited 19 апреля, 20213 yr by ZIKURIK
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.