Jump to content

SetMedia pour un script JS dans un controller ajax


Recommended Posts

Bonjour,

 

je crée un module qui :

 

1) affiche un bouton "stock en magasin" sur la page produit (OK)

2) ouvre une fancybox dont le contenu est une vue chargée en ajax via un controller (OK)

3) cette vue contient un select avec du JS litéral qui fait un appel ajax sur le onChange (OK)

 

4) la fancybox contient une nouvelle vue contenant une google map + des infos chargée en ajax via le même controller (+ des infos propriétaires reçues en socket, cette partie est ok)

=> PROBLEME : le setmedia du controller ne charge jamais le JS et le CSS donc il n'y a jamais la google map.

=> QUESTION : comment charger des scripts JS lors d'un appel ajax via controller (sachant que c'est seulementselon l'action -second appel- qu'il faut charger ce JS de google map)

 

Controller appelé en ajax et qui ne fait pas le setmedia (ou comment intégrer les scripts JS lors du second appel ajax uniquement

=> voir fichier joint impossible de l'afficher ici

Vue (cf 2) retour du 1er appel ajax (1er contenu de la fancybox)

<select id="selectmagasin">
	<option value="">{l s='Choisissez votre magasin' mod='stockmagasin'}</option>
        {foreach from=$magasins item=magasin name=magasin}
				<option value="{$magasin.id_store}">{$magasin.postcode|escape:'htmlall':'UTF-8'} - {$magasin.name|escape:'htmlall':'UTF-8'}</option>
        {/foreach}
</select>
<div id="stock_magasin"></div>
<script type="text/javascript">
{literal}
function StockMagasin() 
{
	$.ajax({
            url:  baseDir+'module/stockmagasin/stockmagasin', // version jeff qui marchebaseDir+'modules/stockmagasin/ajax_stockmagasin.php',
            type: 'POST',
            data: 'ajax=true&method=stockmagasin&magasin='+$("#selectmagasin").val()+'&reference={/literal}{$reference}{literal}',
            success: function(html) 
            {
				$("#stock_magasin").html(html);
            }
    }); 
    return true;
}

$("#selectmagasin").on('change',StockMagasin);
{/literal}
</script>

Vue (cf 4) retour second appel ajax (mise à jour contenu de la fancybox - mais il manque le setmedia du CSS et JS pour que la map google fonctionne)


{if $retour}
 	<p class="alert alert-info margintop">
				Il y en a {$quantite} en stock.
	</p> 
<h1 class="page-heading">{$store.name}</h1>

<div id="map" style="width:100%; height:447px; margin-bottom:20px;"></div>

<div class="row">
	<div class="col-xs-12 col-sm-{if !empty($store.email)}4{else}6{/if}">
		<p>
			<strong>{l s='Address' mod='storespages'}</strong><br/>
			{$store.address1}<br/>
			{$store.postcode} {$store.city}<br/>
			{l s='Tel.' mod='storespages'} : {$store.phone}<br/>
			{l s='Fax' mod='storespages'} : {$store.fax}
		</p>
		<strong>{l s='Working hours' mod='storespages'}</strong>
		{$store.working_hours}
	</div>
	<div class="col-xs-12 col-sm-{if !empty($store.email)}4{else}6{/if}">
		{if $store.has_picture}
			<img src="{$store.image}"  class="img-responsive"  alt="magasin {$store.name}" title="magasin {$store.name}"/>
		{/if}
	</div>
	
	{if !empty($store.email)}
		<div class="col-xs-12 col-sm-4">
			
			<h4>{l s='Contact the shop of %s' sprintf=$store.name mod='storespages'} : </h4>
			
			{if !empty($contact_errors)}
				<div class="alert alert-danger">
					<p>{l s='%d error(s)' sprintf=$contact_errors|@count mod='storespages'} :</p>
					<ol>
						{foreach from=$contact_errors item=v}
							<li>{$v}</li>
						{/foreach}
					</ol>
				</div>
			{else}
				{if !empty($contact_success)}
					<div class="alert alert-success">
						{l s='Email sent.' mod='storespages'}
					</div>
				{/if}
			{/if}
			
			<form method="post" action="">
				<input type="hidden" name="magasin" value="{$store.id_store}">
				<div class="form-group">
					<div class="controls">
						<input class="col-md-12" name="name" type="text" placeholder="{l s='Your name' mod='storespages'}" value="{if !empty($user)}{$user.firstname} {$user.lastname}{/if}">
					</div>
				</div>
				<div class="form-group ">
					<div class="controls">
						<input class="col-md-12" name="address" type="text" placeholder="{if $b2b_enable}{l s='Address of your shop' mod='storespages'}{else}{l s='Your address' mod='storespages'}{/if}" value="{if !empty($user)}{$user.address}{/if}">
					</div>
				</div>
				<div class="form-group ">
					<div class="controls">
						<input class="col-md-12" name="phone" type="text" placeholder="{l s='Your phone number' mod='storespages'}" value="{if !empty($user)}{$user.phone}{/if}">
					</div>
				</div>
				<div class="form-group">
					<div class="controls">
						<input class="col-md-12" name="email" type="text" placeholder="{l s='Your email address' mod='storespages'}" value="{if !empty($user)}{$user.email}{/if}">
					</div>
				</div>
				<div class="form-group ">
					<div class="controls">
						<textarea class="col-md-12" name="message" placeholder="{l s='Your message' mod='storespages'}" style="height:100px;">{if isset($smarty.post.message)}{$smarty.post.message}{/if}</textarea>
					</div>
				</div>
				{$HOOK_DISPLAY_STORESPAGES_CAPTCHA}
				<input type="submit" name="submitContact" class="button orange medium" value="{l s='Send' mod='storespages'}">
			</form>
		</div>
	{/if}
</div>

{else}
	<p class="alert alert-error margintop"> L'article n'est pas disponible, commandez en ligne !</p>
{/if}

stockmagasin.php

Edited by altsphere (see edit history)
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...