Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Posted

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

  • Replies 51
  • Просмотров 33,6k
  • Created
  • Последний ответ

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

Most Popular Posts

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

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

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

Posted Images

  • Author

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

  • Author

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

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

1 час назад, ZIKURIK сказал:

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

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

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

  • Author
46 минут назад, andros0789 сказал:

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

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

1 час назад, ZIKURIK сказал:

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

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

  • 9 месяцев спустя...
В 29.04.2020 в 23:24, ZIKURIK сказал:

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

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

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

2 часа назад, Estomel сказал:

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

Похоже нет))

  • 2 месяца спустя...
  • Author

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

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

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

  • Author
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 )
		{
			//тут должен быть код который собирает данные и отправляет в бд?
		}
      
	}
}


 

  • Author

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

Цитата

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

 

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

 

  • Author
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

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

  • Author
4 минуты назад, WaNted сказал:

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

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

Edited by ZIKURIK

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

  • Author
24 минуты назад, WaNted сказал:

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

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

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

  • Author

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

  • Author

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

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

$с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 )

 

  • Author
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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.