Mac Posted January 17, 2015 Share Posted January 17, 2015 Есть такое приложение Trader feedback system, которое позволяет оставлять отзывы на юзеров, но есть у него один существенный косяк - для текста отзыва отведен input с ограничением на количество символов. Мне же нужна возможность оставлять большие длинные отзывы. Как минимум многострочные. Первым делом заменил input на textarea в шаблоне, но это лишь полдела. Например, если не заполнить обязательное поле, то textarea заполняется текстом, где все переносы заменены на <br>. Глянул в БД. Способ хранения отличается от того, в каком виде хранятся сообщения форума в IPB.Таблица posts:Таблица feedback: Т.е. как видим, в этом приложении любые символы, даже безопасные !, ? превращаются в 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>? Заранее спасибо за ответы. Link to comment Share on other sites More sharing options...
siv1987 Posted January 17, 2015 Share Posted January 17, 2015 $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> 1 Link to comment Share on other sites More sharing options...
Mac Posted January 17, 2015 Author Share Posted January 17, 2015 А! Действительно, перемудрил. Большое спасибо! Единственно непонятным для меня остается вопрос, почему в таблице постов восклицательные знаки хранятся без изменений, а через $this->request в этом приложении в виде html-сущностей. Вроде как смысла нет конвертировать их. Link to comment Share on other sites More sharing options...
siv1987 Posted January 17, 2015 Share Posted January 17, 2015 Потому что посты обрабатываются через парсер ббкодов непосредственно из $_POST.При желании можно добавить замену и для восклицательного знака. str_replace(array('<br />', '!'), array("\n", "!"), $this->request['comment']) Link to comment Share on other sites More sharing options...
DarthOld Posted May 26, 2019 Share Posted May 26, 2019 2,2,10 уже есть у кого? для ИПС 4.4.3 Link to comment Share on other sites More sharing options...
Атаман Posted May 26, 2019 Share Posted May 26, 2019 В магазине =) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now