PHP библиотека для jQuery

jQuery-PHP

С тех пор как сочетание “Web 2.0” пришло в массы, все чаще разработчикам сайтов приходиться добавлять “web 2.0 красивости” к сайтам. Очень помогает в этом JavaScript фреймворк jQuery. Описывать все прелести данного фреймворка я думаю не имеет смысла (о нем и так слишком много написано), но мне, как PHP разработчику, не хватало удобного сервер сайда для генерации AJAX ответа, в итоге на свет появилась PHP библиотека jQuery-PHP

Что в данной библиотеке особенного? Ну во первых это синтаксис – он очень схож с JavaScript частью, вот вам пример:

$('#test0').html('new content');

PHP код для генерации такого скрипта выглядит следующим образом:

jQuery('#test0') -> html('new content');

Как видим из примера – синтаксис действительно повторяет знакомый для многих jQuery. Это конечно простенький примерчик, попробуем что-нить посложнее:

jQuery('#test3 div') -> bind('click', array('test'=>'answer'), 'eventAlert')
                     -> css ('cursor', 'pointer')
                     -> css ('color', '#0000ff')
                     -> css ('textDecoration', 'underline');

или даже так:

jQuery('#test2 div') -> html(date('H:i:s') . ': new content')    		
    		         -> css('backgroundColor' , '#0000ff')
    		         -> filter('.red')
    		         -> css('backgroundColor' , '#ff0000')
    		         -> filter('filter')
    		         -> css('backgroundColor' , '#00ff00');

Как видим – даже такие относительно сложные цепочки работают.

На данный момент я не смог протестировать работу всех функций, знаю точно, что существуют следующие нюансы:

  • методам jQuery, которым в качестве параметров могут быть переданы callback функции могут быть вызваны в PHP, но javascript функции не могут генерироваться на лету, следовательно в качестве параметров следует использовать имя существующей функции
  • для поддержки callback функций приходиться писать правила исключения в файле jquery.php.js (см. мегасвитч начинающийся с 30-ой строки)
  • совсем не тестировалось с плагинами

Так же в данной библиотеки есть служебные методы:

  • addMessage – добавить сообщение
  • addError – добавить сообщение о ошибке
  • evalScript – выполнить javascript

Недостатки:

  • Незначительно увеличивается нагрузка на сервер
  • Со сменой дизайна (или при поддержке скинов в системе) могут возникнуть осложнения

P.S. Данная библиотека очень схожа по назначению с Xajax, только на клиентской части используется jQuery и небольшой класс для разбора ответа сервера.

P.P.S. Будет не совсем честно. если я скажу что писал данную библиотеку самолично, в написании её мне помогали два человека: Дмитрий Чиркин и Владимир Котушенко (точнее они начинали, а я взял молоток и зубило и все переделал заново)…

41 thoughts on “PHP библиотека для jQuery”

  1. А какой смысл генерировать таким образом JS-код? Может лучше его сразу на JS и писать?

  2. А потом делать eval?
    Типа:

    $script[] = '$("#asd").html("content");';
    echo json_encode($script);
    

    И в JS делать eval для каждого вхождения?

    Или Вы имеете ввиду делать по старинке? Послали запрос и js функцией обработали ответ?
    – Так смысл данной библиотеки как раз в том, чтобы не надо было писать js функций, только PHP…

  3. А мне библиотека понравилась.
    Скажу прямо – я ещё её не использовал ни в одном проекте, но попробую обязательно.
    Единственное, что меня смущает – смена дизайна.
    Хорошо, если дизайнер обучающийся и в состоянии понять что и где. Мой – до сих пор присылает мне нарезанные макеты в виде php+inc файлы.
    И 20% времени уходит на то, чтобы понять, что же он имел ввиду.

  4. Активно пользую jquery почти во всех проектах.
    Пока не очень понимаю как связать php и jquery (

  5. Интересно, надо будет попробовать библиотеку…

  6. Походу такой подход может оказаться удобным, но в некоторых случаях есть существенный недостаток. Зависимость от PHP и соответственно от сервера. Так в целом идея неплохая!

  7. не использовал jquery, на мой взгляд mootools имеет на много больше возможностей, хотя возможно и ошибаюсь.

  8. @Dmitry
    Дело вкуса и привычки :)
    Кому-то больше нравится Prototype, кому-то jQuery. Вам – Mootools.

  9. за весь день перелопатил в инете кучу инфы по jquery. так и не смог найти ни одного примера как из select (формируется посредством php) не перегружая форму (все примеры приведенные в инете требуют нажатия кнопки submit) получить новое значение (ну к примеру для использования в следующем select).

  10. Хм… прикольно, в форме глюк.
    Тыкаю кнопку HTML или JS или CSS, а слэш ставится в кнопке php.
    Поправить бы надо бы.

  11. Огромное спасибо, Антон, за твои труды. С удовольствием буду применять твои наработки в своих проектах!

  12. Данная библиотека не дружит с русской кодировкой. Точнее форма в примере не пашет. Поправить бы!

  13. Понял проблему. Функция htmlentities работает плохо с русскими символами, может заменить на htmlspecialchars()? Тогда все ок. За библиотеку спасибо, с виду очень хороша.

  14. Здравствуйте!
    Пользуюсь Вашей библиотекой (спасибо за неё!) и возник вопрос. Если в конструкции $.php(“/1.php”,{“varry”:args}); в качестве args задать массив, то в скрипт приходит только его последний элемент (в скрипте я его получаю как
    $varry = $_POST[“varry”];). Можно ли это как-то исправить?

    1. Проверил, вроде все работает как надо, приведите код полностью – возможно траблы не в бибилотеке…

  15. Код JS

      function getAjax() {
        $.php('ajax/getAjax.php',{'varry':arguments});
      }
    
  16.   include_once 'ajax/scripts/jQuery.php';
      $varry = $_POST["varry"];
      jQuery :: addMessage(count($varry));
      jQuery :: getResponse();
    

    Всегда количество равно 1, сколько бы параметров я не передавал.

  17. Антон, вот мой код до строчки:

    
    
    
    	function getAjax() {
    	  $.php('ajax/getAjax.php',{'varry':arguments});
    	}
    
    	getAjax("первый", "второй", "третий");
    
    

    и php-файл

      define("DA_ROOT", "../");
      include_once DA_ROOT.'ajax/scripts/jQuery.php';
      $varry = $_POST["varry"];
      jQuery :: addMessage(count($varry));
      jQuery :: getResponse();
    

    Попробуйте точно такие файлы создать. Count всегда 1.

  18. PHP части я передаю объект arguments, поскольку не знаю, сколько параметров будет у функции.

    1. Только arguments – не является массивом, приведите его к массиву:

      var args = Array.prototype.slice.call(arguments);
      

      Теперь у вас будет проблема с тем, как jQuery сериализует массив следующим образом:

      {foo:["bar1", "bar2"]} == '&foo=bar1&foo=bar2';
      

      Но можете сами формировать строку запроса – используя JSON – http://www.json.org/json2.js

  19. Добрый день. Помогите пожалуйста, не могу разобраться в чем причина. Есть код

       public function nextpageAction()
       {    
            jQuery('div#test')->html('Hello');
            //output response - requried
            $this->_helper->getHelper('Jquery')->sendResponse();
       }
    

    слово Hello отлично срабатывает и выводится, а вот в если написать Привет, русскими буквами. то скрипт не срабатывает вообще.

    1. У меня такая же проблема. кодировку и пользую Windows-1251.

  20. Антон, добрый день, спасибо за статью, пытаюсь выполнить примеры, но ничего не выходит. Все файлы и папки переименовал согласно путям, ошибок php код не выдает, но и ничего не возвращает. Заранее спасибо за помощь.

    <?
    require_once 'library/jQuery.php';
    ?>
    <script type="text/javascript" language="javascript" src="javascript/jquery.js"></script>
    <script type="text/javascript" language="javascript" src="javascript/jquery.php.js"></script>
    <div id="test0">Old content</div>
    <?
    jQuery('#test0') -> html('new content');
    ?>
    
  21. to Mikel

    Уважаемый, читайте внимательнее текст в начале статьи “… для генерации AJAX ответа …”! Куда Вы слона тулите?

  22. По-моему не нужно смешивать совершенно разные вещи в одну кучу, Jquery – как JavaScript’овая API вполне полноценна и реализует крупные задачи по клиентской части, в то время как PHP занимается серверными процессами. Если исходить из принципа инкапсуляции, то интеграция JS и тем более JQuery в PHP, его нарушает. Это конечно моё мнение, но мне надоело смотреть на это “мясо” из PHP+HTML, а если в PHP ещё вставлять Javascript – ну чтож, поздравляю обфускация succeeded.

  23. Дурацкая библиотека, совершенно не понимаю её назначения! скажем у меня есть клиент на html+js, обменивающийся с сервером на php данными в json формате. Вот и объясните, нахрена мне в php вообще использовать какие-то html-выборки? это очень абсурдно! клиент должен выполнять роль клиента, а сервер роль сервера!

  24. для MVC модели такая библиотека очень вредна… придется писать отображение в коде контроллера, для поддержки будет логичнее и проще делать, как вы написали в первом посте “делать по старинке? Послали запрос и js функцией обработали ответ?” по краинеи мере сразу видно что было до и что должно случится после запроса…

    единственное применение этой библиотеки вижу, только если логика составления этих функций-ответов очень сложна, и зависит от множества условий, а не проста и линеина как у вас…. в этом случае сервер из раза в раз генерирует один и тот же код…

    задумка автора ясна, в небольших проектах может еще и прокатит… для таких целей как в примере наверно только и поидет, сложно придумать стоящий пример для такого “чуда”. и по примеру – чем css стили менять вручную, логичнее менять класс, тогда и с отображением проблем меньше будет… дизаинер сможет его и сам прописать в .css файлах да и поддерживать будет проще… но опять же если ответ с именем класса приходит с сервера, а не прописан в callback функции, то чтобы узнать какие классы понадобятся дизаинеру, ему(или еще кому то) нужно будет смотеть в php код…

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

  25. На локальном серваке работает отлично, как только выгрузил на хостинг firebug выдает response is null. Сделано всё как говориться в статье. В чем дело может быть?

  26. Нахуя?! Зачем? Приведите три весомых примера, когда эти три php-класса помогут разработчикам жить.
    Из описания вообще не ясно что делает код и в каком контексте используется, что возвращает…

    Вот если бы вы написали библиотеку, которая позволит оперировать с html-строкой аналогичным jQuery синтаксисом, будет радость…

    Например

    <?php

    $before = 'My contentMore content’;
    jQuery( $before )->addClass(‘wrap’);
    $after = jQuery( ‘span:first’, $before )->addClass(‘first’)->css(array(‘background:#fff’));
    echo $after; // My contentMore content

  27. На JS очень даже просто на лету генерировать и исполнять код. Кому интересно, можете пообщаться со мной, написав об этом на ganinaleksei@rambler.ru ;)

  28. Одного не могу понять. Неужели отменили консепцию MVC? По моемуб JS код – это часть шаблона (фронтэнд), а не бэкэнда. Потому JS код нужно писать в шаблонах, а не генерировать его на стороне сервера.

  29. Подскажите пожалуйста, с помощью каких тегов можно изменить вид одной ссылки (например фон), при наведении на другую ссылку курсора мыши? Я нашла такой тег jquery
    $(document).ready(function() {

    $(“#mylink1”).mouseover(function(){

    $(“#mylink2”).hide();

    }).mouseout(function(){

    $(“#mylink2”).show();
    Только мне не надо что бы при наведении на одну ссылку исчезала другая. Мне надо, что бы при наведении на 1-ю ссылку мыши, у 2-й ссылки всплыло фото. А при наведении мыши на 2-ю ссылку, у 1-й ссылки поменялся цвет.

Comments are closed.