Jump to content

Chargement du contenu d'un fichier .tpl via Ajax


Recommended Posts

Bonjour,

j'aimerais savoir si l'un d'entre vous avait déja effectué ceci : charger le contenu d'un tpl (uniquement son contenu, pas de header et de chargements CSS & JS) pour l'afficher dans une div en AJAX, sur la version 1.5+.

 

J'ai déja effectué ce système en version 1.4 mais cela ne semble plus passer désormais.

 

En l'occurence ce serait pour charger le fichier contact-form.tpl dans le pied de page.

Mon problème est que rien n'est retourné du contenu du .tpl, uniquement des données en via JsonEncode ou des tests d'affichage.

 

J'ai cru lire dans un autre topic qu'en activant le "mode" ajax, uniquement ce genre de données pouvait être retourné.

 

Merci par avance de votre aide

 

Code Js très simple

$.ajax({
					  type: "POST",
					  url: "contactez-nous?ajax=true",
					})
					  .done(function( msg ) {
						$('#'+nameEnCours).text(msg);
						$('#'+nameEnCours).fadeIn();
					  });

Controller overridé 


class ContactController extends ContactControllerCore
{

	public function setMedia()
	{
		// parent::setMedia();
		$this->addCSS(_THEME_CSS_DIR_.'contact-form.css');
		$this->addJS(_THEME_JS_DIR_.'contact-form.js');
	}

	

	/**
	 * Assign template vars related to page content
	 * @see FrontController::initContent()
	 */
	public function initContent()
	{
		 if($this->ajax) //special variable to check if the call is ajax
		{
			echo "ajax";
			$return = array(
				'hasError' => true,
				'messageTest' => 'Message de test'
			);
			die(Tools::jsonEncode($return));
		}
		else
		{
			parent::initContent();
		}
		
		$this->assignOrderList();
		
		$email = Tools::safeOutput(Tools::getValue('from',
		((isset($this->context->cookie) && isset($this->context->cookie->email) && Validate::isEmail($this->context->cookie->email)) ? $this->context->cookie->email : '')));
		$this->context->smarty->assign(array(
			'errors' => $this->errors,
			'email' => $email,
			'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD')
		));


		if (($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && $token = Tools::getValue('token'))
		{
			$customerThread = Db::getInstance()->getRow('
				SELECT cm.* 
				FROM '._DB_PREFIX_.'customer_thread cm
				WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' 
				AND cm.id_shop = '.(int)$this->context->shop->id.' 
				AND token = \''.pSQL($token).'\'
			');
			$this->context->smarty->assign('customerThread', $customerThread);
		}

		
		$this->context->smarty->assign(array(
			'contacts' => Contact::getContacts($this->context->language->id),
			'message' => html_entity_decode(Tools::getValue('message'))
		));

		
		$this->setTemplate(_PS_THEME_DIR_.'contact-form.tpl');

	}
} 

"Your controller will not display tpl because you will add 'ajax=true' for example and then your code will only deal with json output for example and not display the controller html part."

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...