ajax post preview

Board index phpBBex 1.x Мастерская

Description: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.
Moderator: Поддержка

Post #1by Dr.Death » 08.11.2014, 14:24

Если кто хочет превью поста через ajax можно попробовать такую штуку
Code: Select all
   $('#postform input[name="preview"]').off('click').on('click', function() {
      var previewButton = $(this);
      if(previewButton.hasClass('sending')) return false;

      if($('#postform input[name="form_token"]').val() == 0) {
         var formScript = $('input[name="form_token"]').next('script').text();
         if(formScript) {
            $('#postform input[name="creation_time"]').val(formScript.match(/\.val\('(\d{10})'\)/)[1]);
            $('#postform input[name="form_token"]').val(formScript.match(/\.val\('([a-z0-9]{32,})'\)/)[1]);
         }
      }

      $.ajax({
         type: 'POST',
         url: $('#postform').attr('action'),
         data: $('#postform').serialize() + '&preview=1',
           beforeSend: function() {
            $('#preview').remove();
            previewButton.addClass('sending');
           },
         success: function(data) {
            error = $(data).find('#postingbox p.error').first();
            preview = $(data).find('#preview').first();
            if(error.length) {
               previewButton.parents('.panel').after($('<div id="preview">' + error.wrap('<div>').parent().html() + '</div>'));
            }
            else if (preview.length) {
               previewButton.parents('.panel').after(preview);
               $('#preview .postbody').css('width', '100%');
               $("#preview").find('script').each(function() {
                  eval($(this).text());
               });
            }
            previewButton.removeClass('sending');
         }
      });
      return false;
   });
С гостями и капчей не работает без доработок!
Last edited by Dr.Death on 08.11.2014, 22:22, edited 5 times in total.
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months

Post #2by factotum » 08.11.2014, 18:41

/viewtopic.php?t=752
Можно объединить темы.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Гуру
Location: Люксембург
Reputation: 235
With us: 5 years

Post #3by Dr.Death » 08.11.2014, 19:26

тут нет обработок bbcode :smile:
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months

Post #4by Sumanai » 08.11.2014, 20:02

В 3.1 в расширении для БО всё уже есть. Нужно просто допилить напильником.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1539
With us: 4 yaers 3 months

Post #5by Dr.Death » 08.11.2014, 20:05

Ну я себе пока так допилил, чтоб сильно не ковыряться :smile:
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months

Post #6by factotum » 08.11.2014, 20:05

Dr.Death wrote:тут нет обработок bbcode
Как это нет?
Code: Select all
url: $('#postform').attr('action'),
         data: $('#postform').serialize() + '&preview=1',
Превью запрашивается через стандартный обработчик. ББ-код должны парсится стандартными средствами. Или Ваш первью не показывает ни смайлы, ни обработанные бб-код?
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Гуру
Location: Люксембург
Reputation: 235
With us: 5 years

Post #7by Dr.Death » 08.11.2014, 20:08

нет сторонней обработки, тупо парсинг страницы превью
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months

Post #8by factotum » 08.11.2014, 20:48

Dr.Death wrote:нет сторонней обработки, тупо парсинг страницы превью
Ок. Гляньте код этого: /viewtopic.php?p=8374#p8374
Давно писал и не припомню особенностей, но говорю о том, что и Ваш скрипт, и мой, делают одно и тоже. Разница в адресе обращения, и может быть, в работе для гостей. Превью для Гостей проверяли, работает?
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Гуру
Location: Люксембург
Reputation: 235
With us: 5 years

Post #9by Dr.Death » 08.11.2014, 20:52

Не проверял, но моему должно быть все равно откуда (хоть личные сообщения) и кто шлет :wink:

Added after 8 minutes 17 seconds:
Хотя не, капча меняется и пишет "Ошибка отправки формы. Попробуйте ещё раз." :biggrin: Впрочем гостей у меня нет, поэтому все равно :toothless:

Added after 3 minutes 50 seconds:
А ну да, там на субмит висит прописка токенов в форму...

Added after 12 minutes 21 second:
Допилил.... С каптчей не разбирался...
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months

Post #10by factotum » 08.11.2014, 21:42

Dr.Death wrote:$('#postform input[name="preview"]').off('click').on('click', function() {
есть трезвое объяснение зачем выключаете обработчик событий?
Dr.Death wrote:if(previewButton.hasClass('sending')) return false;
тут просто выйти из функции.
Dr.Death wrote:previewButton.parents('.panel').after(preview);
parent('.panel') будет немного быстрее
Dr.Death wrote:return false;
правильней в обработчик событий .on('click', function(e) { добавить e.stopPropagation.

$.post сократит размер кода.

Added after 3 minutes 36 seconds:
и если можно, добавьте скрин консоли, где виден заголовок ответа сервера по "превью" и целостность передачи данных? Для теста лучше сообщение подлиннее. Строк на 10-20.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Гуру
Location: Люксембург
Reputation: 235
With us: 5 years

Post #11by Dr.Death » 08.11.2014, 22:01

factotum wrote:есть трезвое объяснение зачем выключаете обработчик событий?
Нет, на всякий случай :D
factotum wrote:parent('.panel') будет немного быстрее
учитывая, что ниче не вернет - да :biggrin:
factotum wrote:правильней в обработчик событий .on('click', function(e) { добавить e.stopPropagation.
мне так нравится
factotum wrote:$.post сократит размер кода.
пофигу
factotum wrote:и если можно, добавьте скрин консоли, где виден заголовок ответа сервера по "превью" и целостность передачи данных? Для теста лучше сообщение подлиннее. Строк на 10-20.
обычный код всей страницы превью

капчу победил отрубив проверку для аякса... но это зло, могут заспамить :D
Code: Select all
   
function isAjax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) and mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}

captcha_abstract.php
function validate()
   {
      // dr.death
      // captcha ajax check skip
      if(isAjax() and isset($_POST['preview'])) return false;
Учитывая запрет гостям постить, пофигуууууууу
Last edited by Dr.Death on 08.11.2014, 22:06, edited 1 time in total.
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months

Post #12by factotum » 08.11.2014, 22:04

понятно.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Гуру
Location: Люксембург
Reputation: 235
With us: 5 years

Post #13by Dr.Death » 08.11.2014, 22:10

Как вариант можно докрутить так...
Code: Select all
if(isAjax() and isset($_POST['preview']) and isset($_POST['message']) and !isset($_POST['post'])) return false;
+100500 к безопасности :toothless:

В общем меня на конкретно взятом форуме с его настройками все устраивает :oops:
Моды не пишу, программированию не обучаю. Ваше незнание и нежелание знать, ваши проблемы, а не повод меня оскорблять. Минусите на здоровье, вдруг поможет.
Dr.Death M
Topic author, Гуру
Avatar
Reputation: 69
With us: 2 yaers 9 months


Forum name: Мастерская
Description: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.

Quick reply


Enter the code exactly as it appears. All letters are case insensitive.
Confirmation code
:hi: :smile: :wink: :twisted: :sad: :evil: :smoke: :eh: :eek: :fie: :silenced: :razz: :oops: :help: :spy: :insane: :biggrin: :toothless: :ill: :nervious: :weirdface: :pray: :clap: :think: :boxing: :cyclop: :rambo: :zombie: :cry: View more smilies

   

Return to Мастерская



cron