2012-01-20 25 views
5

¿Cuál es la mejor manera de determinar URL base de una tienda Magento desde el interior de Javascript?Recuperar la URL base del almacén de Magento en javascript

Estoy trabajando en una extensión reutilizable que necesita saber URL base de la tienda en Javascript con el fin de hacer algunas llamadas Ajax. Uno pensaría que una propiedad como

Mage.baseUrl 

estaría disponible, pero no puedo encontrarla.

Una alternativa sería agregar la URL base como un poco de javascript en línea, pero no puedo encontrar ninguna información sobre cómo agregar JavaScript en línea mediante programación (solo archivos js externos), sin alterar la plantilla.

Respuesta

5

Por defecto, esta información no es (de forma fiable, estable) expone a través de Javascript. Tendrá que exponerlo usted mismo a través de un bloque personalizado agregado al diseño. La forma más sencilla de hacer esto será

  1. Adición del bloque a través de archivos de su tema local.xml

  2. Adición de una plantilla a su tema para el bloque por encima

Para añadir el bloque de el diseño a través de su archivo local.xml, algo como esto debería ser suficiente

<default> 
    <reference name="root"> 
     <block name="my_custom_js_block"> 
      <action method="setTemplate"> 
       <template>my_custom_js_block/extra-js.phtml</template> 
      </action> 
     </block> 
    </reference> 
</default> 

A continuación, agregue la siguiente carpeta y archivo en el tema

app/design/frontend/default/your_theme/template/my_custom_js_block/ 
app/design/frontend/default/your_theme/template/my_custom_js_block/extra-js.phtml 

En este punto tiene un archivo phtml plantilla que se representa en cada página. Puede agregar las variables de JavaScript que desee. Soy aficionado a un patrón algo así como

#File: app/design/frontend/default/your_theme/template/my_custom_js_block/extra-js.phtml 
<?php 
    $h = Mage::helper('core'); 
    $info = new stdClass(); 
    $info->base_dir = Mage::getBaseDir(); 
?> 
<script type="text/javascript"> 
    var my_custom_js_block_info = <?php echo $h->jsonEncode($info); ?>; 
</script> 

(código no probado, tope de mi cabeza, pero debería funcionar)

+0

Gracias por la respuesta detallada. ¿Cómo podría agregar este bloque del archivo config.xml de mi módulo, en lugar de local.xml? Estoy creando un módulo reutilizable y no puedo confiar en que el usuario modifique local.xml. –

+0

Google para agregar un archivo XML de diseño personalizado en config.xml de su módulo. Al igual que Mage_Catalog agrega catalog.xml, puede hacer que su módulo incluya un archivo XML personalizado. –

+1

Después de algunas horas de buscar y probar los _mangos_ métodos contradictorios y diferentes para lograr esto, he fallado. ¿Hay alguna forma de saber si mi archivo xml personalizado se está incluyendo en tiempo de ejecución? –

Cuestiones relacionadas