jQuery: решение проблемы с куками на WordPress при использовании MaxCache

Этот пост адресован пользователям WordPress, у которых стоит кэширование с помощь MaxCache. WordPress имеет в своем функционале две очень хорошие особенности, которые повышают юзабилити сайта для посетителей, оставляющих комментарии: Однажды оставив одобренный администратором сайта комментарий, посетитель избавляется от необходимости при каждом следующем комментарии ...

Комментарии (72)
  1. 1

    Огромное спасибо, Димокс! В закладки и блог-шоу однозначно!

  2. 3

    Большое спасибо!

    И проблема решена важная и статья познавательная.

  3. 4

    Дима, я так подумал, наверное всё-таки правильней в форме прицепиться не к id, а к name. В WordPress’е эти name стандартные, а id, как ты и написал, могут меняться. Так что переход к name гарантирует работу (заполнение полей) с любым шаблоном.

  4. 6

    Ура, данные сохраняются :)

  5. 7

    Хм, только что-то после добавки предыдущего коммента моё имя само изменилось сами видите на что.

  6. 9
    richkeeper

    Я вот глянул, а оно будет куки в днях хранить? Может было бы лучше в Unix?

  7. 11
    alexpts

    Чтобы писать $, а не $j
    Можно весь свой скрипт обернуть в такую конструкцию, это самый правильный вариан:
    (function($){
    здесь ваш скрипт…
    })(jQuery);

  8. 14

    Спасибо Dimox огромное, давно искал +один подписчик

  9. 15
    anodized

    Тоже кириллические имена сохраняются как смайлики.

  10. 21
    @

    Я бы назвал все вышеизложенное «ПерАнусДерАстро» :-D
    Все можно сделать гораздо проще.
    1. Удалить из кеша страницу с комментарием, и для этого пользователя (однократно) вывести лайф версию.
    2. Не писать новые свои куки, а взять родные которые создал Вердпресс, и джаваскриптом распихать в инпуты.

    Таким образом не придется править код при обновлении движка.

    Пример скрипта который надо впихнуть в свой шаблон комментариев:


    function searchCookie(name)
    {
    var cookie = " " + document.cookie;
    var search = " " + name;
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
    offset = cookie.indexOf(search);
    if (offset != -1) {
    offset += search.length;
    end = cookie.indexOf(";", offset)
    if (end == -1) {
    end = cookie.length;
    }
    setStr = cookie.substring(offset, end);
    begin=setStr.indexOf('=')+1;
    setStr = unescape(setStr.substring(begin,setStr.length));
    }
    }
    return(setStr);
    }
    function getToInput()
    {
    var arg = getToInput.arguments;
    if (!arg[0]) arg=new Array('author','email','url');

    if (document.cookie)
    {
    var commData=new Array(searchCookie('comment_author'), searchCookie('comment_author_email'), searchCookie('comment_author_url'));
    if (!commData.join('')) return false;
    for (i=0;i<3;i++)
    {
    obj=document.getElementById(arg[i]);
    if ((obj) && (obj.value=='')) obj.value=commData[i];
    }
    }
    }
    // инициализация обязательно вставить после вывода инпутов.
    getToInput('author','email','url');

    • 22

      1. Удалить из кеша страницу с комментарием, и для этого пользователя (однократно) вывести лайф версию.

      Как удалить из кеша страницу с комментарием? И что такое «лайф версия»?

      • 23
        @

        Как удалить из кеша страницу с комментарием?

        Для этого в файле wp-comments-post.php (в корне сайта) добавить
        перед wp_redirect($location); ?> (строка находится в самом конце файла) setcookie(‘comment’,’clearCache’);

        а в начале функции max_cashe() после

        	$dir = realpath(dirname(__FILE__)) . '/cache/';
        	$filepath = $dir . md5($url);
        

        вставить:

        	if ((isset($_COOKIE) && strstr(implode($_COOKIE), 'clearCache')))
        	{
        		if (is_file($filepath)) unlink($filepath);
        		$my_cache_no = true;
        		setcookie('comment','');
        		return false;
        	}
        

        И что такое “лайф версия”?

        Версия не из кеша.

        • 24
          @

          Ой там не $my_cache_no = true;, а наверное $max_cache_no = true;
          Не знаю точно, пока оригинального кода Max’a не видел. Но идея я думаю понятна?

          • 25

            Тут вот в чем дело. В платной версии это уже все работает автоматом. Поэтому ничего менять и доделывать не нужно. :)

            А вот что касается использования родных куков вместо своих — нужно думать. То что не нужно менять шаблон заманчиво, но отлавливать и устанавливать куку нужно до отработки WordPress и тут может быть сложность: в WordPress редиректы при комментировании. Кроме этого кука сама по себе отлавливается WordPress’ом в своих недрах и явно подставляется в инпуты в value. То есть на уровне html-кода. Так что вариант Димы более надежен.

            • 26
              @

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

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

              • 27

                Кешированная страница отдается как есть голой статикой. В ней если и использовать куки, то только на уровне js. Но внедрять js в кэшированную версию не есть хорошо. Код должен оставаться чистым, так как его отдает WordPress.

  11. 28

    Мм, мучился мучился. Вроде все условия выполнены, но во-первых, так и не заработало, а во-вторых, «редактор» вместо простановки тегов лепит мне .
    Скрин вот

  12. 31
    Сергей
    @

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

    Просто добавляю код скрипта в какой-то JS-файл на сайте и подлючаю его?

    очень нужно

  13. 33
    Chupik

    Мда, не знал, что jquery можно использовать и для таких вещей.
    А можно ли узнать по-подробнее насчёт эффективности maxcache? Просто не нашёл на этом блоге. Может, плохо искал? :)

  14. 35
    Ольга

    т.е. чтобы подключить ваш файл нужно:
    в шаблоне с темой, в файле (header.php) прописать строчку

    Затем сохранить Конечный код jQuery-скрипта с любым названием, с расширением js, т.е. допустим файл будет иметь название — comments.js
    Загружаем его в любую директорию на сайт, и аналогично подключаем его в header.php

    И все? Верно?

  15. 42
    HotIce
    @

    Спасибо. Мне первая часть скрипта помогла.
    Не подскажете, вот этот код:

    if (/opera/.test(userAgent)) { var top = 'html'; } else { var top = 'html, body'; }

    , что там Опера не так обрабатывает? Просто не припоминаю, чтоб у меня с ней проблемы были. Мне для общего развития. ;)

    И еще вопрос. Хочу сделать так, чтоб в случае если в браузере куки от меня отсутствуют, в поля вводилась пару слов, типа «здесь имя», а «здесь почта». Я так понимаю — к строчке ниже надо прикрутить конструкцию else?

    if (author) $j('input[name="author"]').val(author);

    if (author) $j('input[name="author"]').val(author) else $j('input[name="author"]').val('Ку-ку');

    — что-то типа этого?
    Я еще, почитаю, ваш блог. В любом случае, надо с jQuery потихоньку разбираться.
    Может в литературу, на ваш взгляд хорошую, ткнете? О программировании понятие имею, c jQuery сегодня вот, столкнулся.

  16. 44
    Komarik
    @

    Скрипт помогает не только при использовании кеширующего скрипта Максима. Есть шаблоны, в которых и без него эта проблема существует. То, что комментарий ушел на модерацию видно, а вот данные свои приходится вводить в поля по новой каждый раз. Вчера выяснилось, что этим грешат шаблоны от yootheme.com. Лень было разбираться, впихнули этот скрипт, и все заработало как нужно. Так что спасибо за скрипт.

  17. 45
    kayros
    @

    Здравствуйте.
    Вижу. что вы неплохо разобрались с плагином MaxCache. Может дадите несколько советов по работе с ним.
    Меня интересует, как можно реализовать одновременную работу ЧПУ и MaxCache.
    С пустым .htaccess скрипт отлично работает, но, когда включаю mod_rewrite, возвращаются тормоза.
    Спасибо!

  18. 47

    С русскими никами проблему никак не решили? (в chrome работает корректно, а firefox заменяются на разные символы типа: @0>@?2 )

  19. 49
    @

    Отлично! Только вчера начал использовать MaxCache и сразу решил устранить некоторые баги. С Вашим скриптом всё получилось с первого раза! Сам попробовал оставить комментарий — вроде бы все сохранилось… Спасибо большое)))

  20. 50

    Расскажите подробнее. Я установил скрипт Максима. Теперь хочу по Вашей статье установить эти скрипты. Но не знаю, как подключить их к сайту. Информации более нигде не нашел. Спасибо.

Ваш комментарий