Jump to content
  • 0

TinyMCE, Mootools, AJAX


StormMan
 Share

Question

Друзья, проблема такая:

было текстовое поле для добавления комментария. Прицепил к нему TinyMCE, комментарии перестали отправлятся. Ошибка на уровне js, так как отправки формы как таковой не происходит, она перехватывается.

Вот пример: http://zazhizn.ru/ логин test и пароль test12345

На страничке http://zazhizn.ru/test/ во вкладке Комментарии, пишем любой коммент, например 123, жмём отправить - и ничего не отправляется, вылазит сообщение "Пожалуйста, напишите сообщение". Без TinyMCE всё работает, это сообщение вообще вылазит только на пустой коммент, а с Тини на любой такая реакция...

В движке используется фреймворк MooTools.

За комментарии отвечает файл include/js/core-min.js , а за Тини include/tiny_mce/tiny_mce.js

Сообщение "Пожалуйста, напишите сообщение" в core-min.js зовётся this.Base.Language.Translate(831)

Очень долго рылся в кодах, несколько часов потратил на чтение разных материалов от гугла, но толком ничего не нашёл... вот например одна ссылка, но я толком из неё ничего не понял: http://forum.runlive.org/index.php?PHPSESS...&topic=80.0

Я понимаю, что мой вопрос - это конкретная такая проблема, и с ходу её наверняка не решить. Но, может быть, взглянув опытным взглядом, кто-нибудь сможет мне хотя бы намекнуть - в чём проблема? В фреймворке, или в этих яваскриптах, или в чём?

У меня уже шесть утра, внедрением ТиниМСЕ уже второй день занимаюсь, и всё какая-нибудь трабла да вылезет...

Помогите советом, пожалуйста.

Edited by StormMan
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Есть подозрения, что в обработчике формы (php) поле текстареа обрабатывает функция htmlspecialchars().

Ищи переменную (в текстареа name="imya_peremennoj") в обработчике $imya_peremennoj .php (<form action="obrabotchik.php">).

Строчка должна быть такая: $imya_peremennoj = htmlspecialchars($_POST['imya_peremennoj']);

Link to comment
Share on other sites

  • 0

Спасибо за наводку! Посмотрел в сторону php. Но решить проблему не удалось. Максимум, чего получилось добиться - комментарии стали отправляться, но пустые.

Для обработки комментариев в движке используется отдельный файл include/class_comment.php.

Для отправки комментариев используются свои функции, точнее даже отдельный класс. Вот кусок кода, который мне показался интересным:

// $comment_body - это наша переменная от textarea
// MAKE SURE COMMENT BODY IS NOT EMPTY - ADD BREAKS AND CENSOR
$comment_body = cleanHTML(censor($comment_body), $setting['setting_comment_html'], Array("style")); //если закомментить только этот участок, то ошибка остаётся. $setting берёт значение из БД, список разрешённых тегов выводится под полем коммента
$comment_body = preg_replace('/(\r\n?)/', "\n", $comment_body); //1
$comment_body = str_replace("\n", "<br>", $comment_body); //2
$comment_body = preg_replace('/(<br>){3,}/is', '<br><br>', $comment_body); //3
$comment_body = str_replace("'", "\'", $comment_body); //4
//если закомментить строки //1 //2 //3 //4 то проблема остаётся, то же самое и в случае, если закомментить плюсом и $comment_body
// Ниже штучка интереснее. Если её убрать, то комментарии отправляются, но пустые.
if( !trim($comment_body) )
{
$this->is_error = 1; // Если убрать только эту строчку, то отправляется пустой коммент.
$comment_body = ""; // Если убрать только эту строчку, то ничего не отправляется, та же ошибка
}
// Если закомментить всё вышенаписанное, то отправляется пустой коммент

В начале класса идёт объявление переменной $is_error:

var $is_error;			// DETERMINES WHETHER THERE IS AN ERROR OR NOT

Но почему значение выставляется в 1, если комментарий отправляется из TinyMCE? Если код с ошибкой совсем убрать, то комментарий пустой... Не понимаю...

От чего это может зависеть?

Полностью файл лежит здесь: http://zazhizn.ru/class_comment.rar

Edited by StormMan
Link to comment
Share on other sites

  • 0

1) Пустота возможно потому, что $comment_body надо сделать глобальной: $comment_body = $_POST['comment_body'];

2) $this->is_error = 1; - это true (правда), соответственно $this->is_error = 0; - false (ложь).

3) функция preg_replace

4) функция str_replace

5) функция trim

6) $comment_body = ""; - если ничего нет, то есть пустота

З.Ы. вообще конечно лучше убрать все проверки, иначе мне кажется редактор не удастся использовать.

Link to comment
Share on other sites

  • 0

rus, спасибо! Пробую убрать всю проверку. Конечно, так работать нельзя, но может получится найти, какая из проверок ошибку возвращает.

1) Я так понимаю, что в этом случае комментарии вообще не отправлялись бы? А они на других страницах, где не подключен Тини, нормально отсылаются.

2) Ну да. Понять бы только, почему она true. trim срезает пробелы в конце и начале, значит, если пробелы есть, то получаем $this->is_error = 1; Правильно я логику понимаю? Но если есть пробелы, то, когда убираю эту строку с ошибкой и следующую, удаляющую коммент $comment_body = ""; , они должны ведь и в БД прописываться. Но в БД пусто, то есть комментарий прописывается со всеми параметрами, кроме comment_body. Почему такое противоречие?

3)4)5) Большое спасибо за ссылки!

6) Я так понимаю, что до этого $comment_body может что-то содержать?

Link to comment
Share on other sites

  • 0

понимаешь в чем дело, я в ооп мало что смыслю, могу посоветовать для отладки вывести после (вроде бы...):

return Array(
'comment_id' => $comment_id,
'comment_body' => $comment_body,
'comment_date' => $comment_date
);

какую-то из этих: $resource = $database->database_query

типа: echo $resource;

и смотреть что выводит, короче я знаю что надо запрос query выводить, но повторюсь, в ооп плохо смыслю, как слепой котенок.

Link to comment
Share on other sites

  • 0

Большое спасибо тебе за помощь!)))))

Видимо, в данный момент я ещё не готов к воплощению подобных идей, очень много времени потратил, но так и не нашёл, в чём же дело. Вернусь к этому вопросу, когда будет больше навыков и знаний :blink:

Link to comment
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
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy