Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] plugins de templates Jquery

Posted by julien j on 05/31/2008 19:15

Bonjour,

suite au ticket 30 je propose une version de la fonction "link_to_remote".

Cependant avant de poster un diff, c'est ma première contribution, j'aimerais avoir votre avis sur le code.

surtout que j'ai rajouté une variable $id : elle permet d'utiliser plusieurs fois le plugin dans une même page, mais ce "bricolage" ne me plait pas trop !

Voila le code (attention adapté à la dernière version de Jelix : svn)

fichier : function.link_to_remote.php

 <?php
  
 /**
 * @package     Jelix
 * @subpackage  jtpl_plugin
 * @author      Julien Jacottet
 * @contributor
 * @copyright   2008 Julien Jacottet
 * @link        http://www.jelix.org
 * @licence     GNU Lesser General Public Licence see LICENCE file or  http://www.gnu.org/licenses/lgpl.html
 */
 
 
 function jtpl_function_html_link_to_remote($tpl, $label, $element_id,  $action_selector, $action_parameters, $option, $id=1) {
  
 
 global $gJCoord,$gJConfig;
	
 // Add js link
 $gJCoord->response->addJSLink($gJConfig->urlengine['basePath'].'jelix/jquery/jquery.js');
 
 //Initialise
 $url = jUrl::get($action_selector, $action_parameters);
 $position = ((array_key_exists("position", $option)) ? $option['position'] : 'html' );
 $method = ((array_key_exists("method", $option)) ? $option['method'] : 'GET' );
 $beforeSend = ((array_key_exists("beforeSend", $option)) ? $option['beforeSend'] : '' );
 $complete = ((array_key_exists("complete", $option)) ? $option['complete'] : '' );
 $error = ((array_key_exists("error", $option)) ? $option['error'] : '' );
	
 // Link
 echo "<a onclick='link_to_remote_".$id."();'>".$label."</a>\n";
 
 // Script
 echo "
	<script>
	   
	   function link_to_remote_".$id."() {
		   $.ajax({
			  type: '".$method."',
			  url: '".$url."',
			  beforeSend: function(){".$beforeSend.";},
			  complete: function(){".$complete.";},
			  error: function(){".$error.";},
			  success: function(msg){
			     $('#".$element_id."').".$position."(msg);
			  }
		   });
	   };   
	</script>";
 }
 ?>

Exemple d'utilisation :

 {link_to_remote
  'mon test 1',
  'result',
  'montest~default:ajax', array('id'=>'34'),
  array(
    'position'=>'html',
    'method'=>'GET',
    'beforeSend'=>'alert("beforeSend")',
    'complete'=>'alert("complete")',
    'error'=>'alert("error")',
 )}
 
 <div id="result">Ici les resultats</div>

Pour les options :

position : (voir doc jquey )

  • html (default)
  • append
  • prepend

method :

  • GET (Default)
  • POST

beforeSend : JS a executer avant la requète Ajax

complete : JS a executer aprés la requète Ajax (même si erreur)

error : JS a executer si erreur

Merci

Julien

  [Opened] Re: plugins de templates Jquery

Reply #1 Posted by laurentj on 06/01/2008 14:15

Salut,

même si tu n'es pas sûr de ton code, il n'y a pas de mal à proposer ça directement dans un ticket.

Pour l'histoire de l'id, c'est effectivement pas terrible qu'il soit en argument. Tu pourrrais plutôt avoir $id en variable statique à l'interieur de la fonction, et l'incrémenter directement. C'est ainsi totalement transparent

  static $id =0;
  $id++;
 
Page
  1. Re: plugins de templates Jquery