Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Mac

Многострочные отзывы в Trader feedback system

Рекомендованные сообщения

Есть такое приложение Trader feedback system, которое позволяет оставлять отзывы на юзеров, но есть у него один существенный косяк - для текста отзыва отведен input с ограничением на количество символов. Мне же нужна возможность оставлять большие длинные отзывы. Как минимум многострочные. Первым делом заменил input на textarea в шаблоне, но это лишь полдела. Например, если не заполнить обязательное поле, то textarea заполняется текстом, где все переносы заменены на <br>.

 

Глянул в БД. Способ хранения отличается от того, в каком виде хранятся сообщения форума в IPB.

Таблица posts:

post-56753-0-53751900-1421484296_thumb.png

Таблица feedback:

post-56753-0-70662800-1421484297_thumb.png

 

Т.е. как видим, в этом приложении любые символы, даже безопасные !, ? превращаются в html-сущности.

 

Ладно, лезем в код. Файл /admin/applications_addon/other/feedback/modules_public/view/view.php. Функция вставки в БД:

$this->DB->insert( 'feedback',
								array(	'date'		=> time(),
										'sender'	=> $this->memberData['member_id'],
										'receiver'	=> $userid,
										'note'      => $this->request['comment'],
										'ip'		=> $_SERVER['REMOTE_ADDR'],
										'score'     => $this->request['leaving'],
										'link_type' => $this->link['type'],
										'link'      => $this->link['id'],
										'type'      => $this->request['role']
									)
							);

Честно говоря, в коде IPB еще разбираться не доводилось, потому и прошу совета гуру. Как видим, тут текст коммента берется из $this->request. Видимо, IPB это свойство уже каким-то образом очищает от возможных опасных конструкций, а именно превращает все символы в html-сущности без разбору. Нам это не нужно. Посмотрел, как обрабатываются обычные посты и темы. Там используется чистый массив $_POST, который прогоняется через:

IPSText::parseCleanValue( $this->_topicTitle )

 

Итого, безопасно ли заменить в вышеприведенном коде:

'note'      => $this->request['comment'],

на

'note'      => IPSText::parseCleanValue($_POST['comment']),

?

 

И, соответственно, в шаблоне:

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($this->request['comment'])">{$this->request[['comment']}</if></textarea>

на

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($_POST['comment'])">{$_POST['comment']}</if></textarea>

?

 

Заранее спасибо за ответы.

Поделиться сообщением


Ссылка на сообщение

$this->request это и есть массив GET|POST параметров обработанные через IPSText::parseCleanValue. Т.е. единственное что вам нужно сделать, это заменить в textarea

на new line.

 

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($this->request['comment'])">{parse expression="str_replace('<br />', "\n", $this->request['comment'])"}</if></textarea>

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

А! Действительно, перемудрил. Большое спасибо!

 

Единственно непонятным для меня остается вопрос, почему в таблице постов восклицательные знаки хранятся без изменений, а через $this->request в этом приложении в виде html-сущностей. Вроде как смысла нет конвертировать их.

Поделиться сообщением


Ссылка на сообщение

Потому что посты обрабатываются через парсер ббкодов непосредственно из $_POST.

При желании можно добавить замену и для восклицательного знака.

 

str_replace(array('<br />', '&#33;'), array("\n", "!"), $this->request['comment'])

Поделиться сообщением


Ссылка на сообщение

2,2,10 уже есть у кого? для ИПС 4.4.3

Поделиться сообщением


Ссылка на сообщение

В магазине =)

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...