AJAX-enabled Smarty plugins

Posted by Dmytro Shteflyuk on under JavaScript, PHP · Русский (142,234 views)

Today I’ve created simple AJAX-enabled plugins for Smarty. I don’t try to develop powerful reach-applications framework. I can give you only idea how to integrate AJAX-technology into Smarty. But if you have any offers how to improve anything I’ve described or if you just want to leave feedback please post you comments on my site.

In my practice I need several things from AJAX: to update some nodes in DOM, to send forms without post-back, to retrieve some values or to perform server-side calculation (maybe using database or other server-side resources). It’s necessary to write tons of JavaScript to implement my requirements in spite of using cool JavaScript library Prototype.

I decided to integrate Smarty with AJAX. There are three Smarty plugins has been created: ajax_update, ajax_call, ajax_form. Below all this plugins will be described.

ajax_update

This Smarty function can be used for update some parts of web-page.

Sample usage:

1
2
<a href="#" onclick="{ajax_update update_id='intro_content'
 function='update_intro' params='page=about'}">About</a>

Possible parameters:

  • url – URL for AJAX-query (when no URL was specified current one will be used)
  • method – query method (by default get, can be get or post)
  • update_id – ID of HTML element for update
  • function – function which will be called
  • params – URL-encoded parameters

ajax_call

This Smarty function can be used for call PHP function on server side and retrieve its output.

Sample usage:

1
2
<a href="#" onclick="{ajax_call function='calculate'
 params_func='calc_params' callback='calc_cb'}">Calculate</a>

Possible parameters:

  • url – URL for AJAX-query (when no URL was specified current one will be used)
  • method – query method (by default get, can be get or post)
  • function – function which will be called
  • params – URL-encoded parameters
  • callback – JavaScript function which will be called when query will be completed
  • params_func – JavaScript function used when you need custom parameters calculated on client side

ajax_form

This Smarty block can be used for submit Web-forms without post-back.

Sample usage:

1
2
3
{ajax_form method="post" id="form_register"}
Any form-element can be placed here
{/ajax_form}

Possible parameters:

  • url – URL for AJAX-query (when no URL was specified current one will be used)
  • method – query method (by default get, can be get or post)
  • params – URL-encoded parameters
  • id – form ID
  • callback – JavaScript function which will be called when query will be completed

Samples

These plugins are quite simple and I think everyone can create even better than mine. I’ve just wanted to show you idea how integration can be done. Working examples can be found here. Also you can download full sources.

71 Responses to this entry

Subscribe to comments with RSS

said on February 22, 2006 at 12:42 pm · Permalink

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

Michel
said on February 22, 2006 at 4:53 pm · Permalink

Hey very cool! keep up the good work!

said on February 22, 2006 at 5:04 pm · Permalink

really a great idea!

Leksi
said on February 28, 2006 at 6:10 pm · Permalink

Попробовала использовать вышепредложенные плагины. У меня довольно быстро все получилось, хоть до этого с Ajax я была знакома только в теории.
Пара замечаний:

  • в ajax_form было бы неплохо добавить возможность вешать обработчик на onsubmit, а так же устанавливать дополнительные аттрибуты тега <form>.
  • во всех плагинах, если приходит метод, отличный от POST или GET, по умолчанию устанавливать один из них, а не ту лабуду, которую туда можно подсовывать.

С нетерпением жду ajax_table :) Двигаешься в правильном направлении, так держать :)

jack
said on March 7, 2006 at 12:30 am · Permalink

hey great job… just one thing… when used in IE, the page gets cached and does not refresh with new content. anyway to solve that?

said on March 7, 2006 at 6:31 am · Permalink

To prevent IE from caching pages you can add to all url any random string (for example http://somehost.com/index.php?4397593847)
You can do this using JavaScript-function Math.rand() or PHP function mt_rand() or rand().

Another way is to set page headers to disable cache:

1
2
3
4
5
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
Szenna @
said on March 15, 2006 at 5:24 pm · Permalink

hi,
I have one question:
can i use/call class functions in the ajax_update and ajax_call?

thx

said on March 15, 2006 at 5:41 pm · Permalink

Unfortunately, this is not possible in current version.

chris
said on April 8, 2006 at 2:11 pm · Permalink

I don’t speak inglish, but let me say. Your plugin es really fantastic

baz
said on May 12, 2006 at 3:34 pm · Permalink

клевый ход , так держать

vipin
said on May 16, 2006 at 12:59 pm · Permalink

how can smarty section implemented using ajax.
i tryed but got some error.
please help

said on May 16, 2006 at 1:06 pm · Permalink

Hmm. I haven’t understood your problem. Can you provide code that you use?

said on May 16, 2006 at 9:41 pm · Permalink

[...] Bellow is the simple resources of Ajax Enabled Smarty plugins. I got from this site [http://kpumuk.info/ajax/ajax-enabled-smarty-plugins/]. this part of articles In my practice I need several things from AJAX: to update some nodes in DOM, to send forms without post-back, to retrieve some values or to perform server-side calculation (maybe using database or other server-side resources). It’s necessary to write tons of JavaScript to implement my requirements in spite of using cool JavaScript library Prototype. [...]

Milary @
said on August 27, 2006 at 11:16 am · Permalink

This website is Great! I will recommend you to all my friends. I found so much useful things here. Thank you.

skonealone
said on August 31, 2006 at 9:13 am · Permalink

hi

its greate job … well i am new to smarty and facing some problem, please help me as i am already using the smarty, now i dont want to change existing smarty setup, without changing the existing smarty configuration and i want to intigrate your AJAX-enabled Smarty plugins in my existing smarty configuration. so can u help me how do i intigrate ur plugin in it??? and as i tryed to intigrate i get syntax error called “unrecognized tag ‘ajax_form’” so pls help me in it.

let me know the steps..

thanx in advance n awaiting for ur reply

regards
-skonealone

skonealone
said on August 31, 2006 at 11:45 am · Permalink

hi once again .. as i intigrated the smarty_ajax plugin but still me not able to post the variables to the action page..
when i click on submit button .. nothing is happening..
pls let me know where i am doing wrong..

regards
-skonealone

mr. ajax @
said on September 17, 2006 at 4:26 pm · Permalink

hi kpumuk,

how can i realize this: (look at the params, need this in smarty foreach)

1
onclick="{ajax_update url='test2.php' update_id='intro_content' function='update_intro3' params='page={$param}&test=yeah'}

thx

said on September 25, 2006 at 1:50 pm · Permalink

Hello, mr. ajax
This is standard Smarty future: you can use $variable inside {} in following way:

1
onclick="{ajax_update url='test2.php' update_id='intro_content' function='update_intro3' params='page=`$param`&test=yeah'}"
gotmyredhaton
said on September 26, 2006 at 8:08 pm · Permalink

hello kpumuk,
great work, thank you very much.

i found the callback isn’t working when using ajax_call.
can’t figure out why.

wouldn’t it be better to merge call and update?
at least, ajax_call with a callback to “update a div” would do it.

regards,
gotmyredhaton

Rafael Affonso
said on September 26, 2006 at 11:28 pm · Permalink

Ajax without XML????? I can’t understand, I need XML…

Thiago
said on October 3, 2006 at 4:49 pm · Permalink

Hi, congratulations for this plugun, its fantastic. But, how i can auto-load update intro in a div element?? onLoad event cannot load update_intro, only onclick is possible!!! Thanks

Franco
said on October 9, 2006 at 3:52 pm · Permalink

Hi, I want to use update to do that on some part, process a code and show the same smarty templated thing every 1 second.
Should pasting a line like {ajax_update update_id="intro_content"
function="update_intro" params="page=about"}
inside the javascript function that trigger timers work? Will that make it to recalculate the smarty templated code i wan to show or it’s already locked?

said on October 10, 2006 at 5:04 am · Permalink

Hi Franco!
Just look at the examples. In chat.php and corresponding Smarty template you can find periodically updated part of page. Think it can help you.

Franco
said on October 10, 2006 at 5:07 am · Permalink

thank you very much, you were very helpfull

said on October 16, 2006 at 7:01 pm · Permalink

Szenna’s comment inspired me to modify smarty_ajax to support calling object methods from ajax_call and ajax_update. I added an optional parameter “object” to both so you can call the function as a method of an object.

If you need this functionality, you can get it from http://logankoester.com/smarty_ajax/

@Kpumuk: Are you interested in incorporating my patch in the next release of smarty_ajax?

Mellisa @
said on October 19, 2006 at 6:25 pm · Permalink

Hi, nice very nice page..!

Good luck !

German @
said on October 26, 2006 at 5:27 pm · Permalink

Отличные плагины!
Спасибо тебе! Был бы очень рад увидеть еще плагины для смарти…

Это то, чего давно не хватало смарти.

More comments: 1 2 3

Comments are closed

Comments for this entry are closed for a while. If you have anything to say – use a contact form. Thank you for your patience.