Jump to content

древовидные комментарии\сообщения

Featured Replies

Может у кого есть наработки или кто-то знает как проще организовать древовидные комментарии (при ответе комментарий пользователя выводится под комментарием другого пользователя)

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/
Share on other sites
  • Replies 51
  • Created
  • Последний ответ
Expand topic overview

Лучшие авторы в теме

Лучшие авторы в теме

Most Popular Posts

Exception
Exception

Пока вот что удалось реализовать Плагин при включении в выбранных приложениях существенно изменяет логику комментариев - Возможность отдельно ответить на комментарий (с возможностью отмены ответа)

Exception
Exception

Переписал логику. Теперь скрипт точно выбирает как работать с сообщениями, улучшены алгоритмы: куда вы нажали, есть ли ответы, кто добавляет комментарий (вы или другой пользователь) и т.д. Весь вывод

Exception
Exception

Есть рабочая версия, проверил работу на 2 проектах. Работает с приложениями: cms, downloads, blog, calendar, gallery, videos, videobox Плагин продам за 1.000 РУБ (В ЛС) и так же в случае возникновения

Posted Images

Expand topic overview

у меня есть комменты с $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;)

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=161857
Share on other sites

жду вашей помощи 🤗

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=161863
Share on other sites

вроде разобрался как вывести деревом.

Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место?

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=161865
Share on other sites
1 час назад, ZIKURIK сказал:

вроде разобрался как вывести деревом.

Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место?

она может быть внизу, просто отправка должна осуществляться именно к твоему 1 comment ($id = 1; $pid = 0; $level = 0;)

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=161866
Share on other sites
46 минут назад, andros0789 сказал:

она может быть внизу, просто отправка должна осуществляться именно к твоему 1 comment ($id = 1; $pid = 0; $level = 0;)

мысль не уловил. форма у меня должна показываться\переноситься под нужный мне комментарий для ответа, если она будет снизу, это не удобно для ответа и если форма снизу, то комментарий подгружается в самом низу, и встает на нужное место в дереве только после перезагрузки страницы

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=161868
Share on other sites
1 час назад, ZIKURIK сказал:

мысль не уловил. форма у меня должна показываться\переноситься под нужный мне комментарий для ответа, если она будет снизу, это не удобно для ответа и если форма снизу, то комментарий подгружается в самом низу, и встает на нужное место в дереве только после перезагрузки страницы

когда вы нажимаете цитировать или ответить, у вас происходит прокрутка до поля ввода сообщения , то есть вниз)Вот здесь как раз таки и вся суть моего поста выше)Чем неудобно оставить стандартное поле внизу, просто останется прокрутка вниз автоматическая, но сообщение будет подставляться к нужному комменту. Просто хочется увидеть что у вас получилось, может допишу то что начали вы, надо увидеть то что есть

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=161869
Share on other sites
  • 9 месяцев спустя...
В 29.04.2020 в 23:24, ZIKURIK сказал:

вроде разобрался как вывести деревом.

Как подгружать форму {$record->commentForm()|raw} динамически в нужное мне место? например при нажатии кнопки в определенном месте на странице, вся форма должна подгрузиться именно туда, где была нажата кнопка, и если была нажата кнопка в другом месте на странице, удалить эту форму и подгрузить в новое место?

привет, тоже захотел древовидные комментарии и начал гуглить, наткнулся на эту тему, удалось реализовать? если да, сможете поделиться?

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=167473
Share on other sites
2 часа назад, Estomel сказал:

привет, тоже захотел древовидные комментарии и начал гуглить, наткнулся на эту тему, удалось реализовать? если да, сможете поделиться?

Похоже нет))

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=167477
Share on other sites
  • 2 месяца спустя...

Вопрос к кодерам:
какой класс\метод нужно захукать чтобы дополнительно отправить нужные данные например из <input type="hidden" name="idd" value="0"> в бд к добавляемому комменту?
Коммент же method="post" отправляется на сервер, какой метод обрабатывает этот запрос и добавляет коммент в базу данных?

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168798
Share on other sites

Добавление коммента обрабатывает функция commentForm класса \IPS\Content\Item. В jquery это addToCommentFeed

Судя по всему нужно создавать новый экземпляр редактора по клику на кнопку Ответить.

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168799
Share on other sites
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 )
		{
			//тут должен быть код который собирает данные и отправляет в бд?
		}
      
	}
}


 

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168800
Share on other sites

Есть какие соображения? Уверен тут есть человеки которые плагины\приложения пишут.

Цитата

Я так понял это _commentForm(), commentForm( $lastSeenId = NULL ), commentFormElements(), processCommentForm( $values ) но не могу понять какой код формирует данные из полей (эдитора и input hidden) и отправляет их в бд

 

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168820
Share on other sites

Это очень сложно, не так просто как кажется на первый взгляд. Нужно много времени на разработку и тестирование.

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168823
Share on other sites

Скрытые поля можно добавить в методе _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;
}

 

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168860
Share on other sites
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

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168870
Share on other sites

Тогда попробуйте получать значение с помощью \IPS\Request::i()->key. Если тоже вернёт изначально установленное значение, то попробуйте указывать скрытое поле в шаблоне.

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168871
Share on other sites
4 минуты назад, WaNted сказал:

Тогда попробуйте получать значение с помощью \IPS\Request::i()->key. Если тоже вернёт изначально установленное значение, то попробуйте указывать скрытое поле в шаблоне.

\IPS\Request::i()->key да, так принял правильное значение. В чем может быть проблема первого метода?

Edited by ZIKURIK

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168872
Share on other sites

Нет никакой проблемы, может просто в обработчике формы не предусмотрено изменение скрытых полей на фронте. Сейчас не у компа, можете сами посмотреть это в \IPS\Helpers\Form метод values.

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168873
Share on other sites
24 минуты назад, WaNted сказал:

Нет никакой проблемы, может просто в обработчике формы не предусмотрено изменение скрытых полей на фронте. Сейчас не у компа, можете сами посмотреть это в \IPS\Helpers\Form метод values.

там походу только тоглы передаются togglesOn / togglesOff / toggles

т.е. работает только с формами new \IPS\Helpers\Form... я так понял

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168876
Share on other sites

и безопасно ли так записывать в бд через \IPS\Request::i()->key ? Хотя в любом случае мне придется делать проверку т.к. в бд принимаются только int значения

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168877
Share on other sites

WaNted спасибо за помощь, буду пилить дальше. Вот что пока что вышло:

Спойлер

123.thumb.png.44ae02ae715b5047ad3867f946101d95.png

 

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=168878
Share on other sites

есть такая итерация:

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 by ZIKURIK

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=169025
Share on other sites
$с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 )

 

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=169026
Share on other sites
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 by ZIKURIK

Link to comment
https://ipbmafia.ru/topic/22116-drevovidnye-kommentariisoobsheniya/?&do=findComment&comment=169030
Share on other sites

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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.