2010-04-18 7 views
2

j'ai une configuration Kohana suivante:Kohana et chemin Javascript

Tous mes fichiers sont placés sous public_html/koh ' Mes fichiers js sont placés sous public_html/koh/media/js /'

J'utilise html :: aide du script à inclure ces fichiers javascript qui me génère le code html suivant:

<script type="text/javascript" src="/koh/media/js/site.js"></script> 

Dans mon js j'accéder à l'un des contrôleurs comme 'JSON/getsomething' (qui est http://localhost/koh/json/getsomething).

Il fonctionne bien aussi longtemps que je reste en haut du contrôleur: http://localhost/koh/home

Quand je vais à « http://localhost/koh/home/index », il rend la même page bien sûr, mais « JSON/getsomething » est pas accessible à partir Javascript plus.

Comment puis-je résoudre ce problème?

Inclure Javascript en utilisant le chemin absolu? Créer une variable dans js comme var fullPath = 'http://localhost/koh/'?

Quelle est la meilleure pratique pour le faire?

Leonti

Répondre

4

Voici comment je l'ai fait.

J'ai fait une fonction url_base qui correspondrait à url::base de kohana et donc il changerait quand je passerais de localhost à production.

Voir modèle:

<script type="text/javascript"> 
    function url_base() { return "<?php echo url::base();?>"; } 
</script> 

Et puis dans config.php:

if(IN_PRODUCTION) { 
    $config['site_domain'] = '/'; 
} 
else { 
    //if in localhost redirect to localhost/mysite 
    //instead of just localhost 
    $config['site_domain'] = '/mysite/'; 
} 
+0

Fonctionne comme un charme! Exactement ce dont j'avais besoin! – Leonti

2

(un peu en retard, mais encore de l'espoir utiles) Voici une autre façon que j'utilise pour mieux organiser mes js-serverside vars .

J'ai mis quelque part en commençant quelques variables de base - par exemple. dans "avant()" fonction:

$this->template->appconf = array(
     'url_base' => url::base(), 
     'l' => substr(I18n::$lang, 0, 2), 
    ); 

Maintenant, je peux ajouter chaque fois que je besoin une variable supplémentaire:

$this->template->appconf['page_key'] = 'product_page'; 

Et enfin dans le modèle de cette cleaniness:

<script type="text/javascript"> 
    var appconf = <?php echo json_encode($appconf); ?>; 
</script> 

Utiliser comme celui-ci :

<script type="text/javascript"> 
    console.log(appconf.url_base); // "/mysite/" 
</script>