2010-04-18 4 views
2

У меня есть следующие установки Kohana:Kohana и Javascript путь

Все мои файлы помещаются под 'public_html/KOH' My JS файлы помещаются под 'public_html/KOH/СМИ/JS /'

Я использую HTML :: помощник сценарий включает те JavaScript файлы, сгенерированные меня следующий код:

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

в моих JS получить доступ один из контроллеров, как «JSon/getsomething» (который http://localhost/koh/json/getsomething).

Он работает нормально, пока я остаюсь в верхней части контроллера: http://localhost/koh/home

Когда я иду в «http://localhost/koh/home/index», это делает ту же страницу, конечно, но «JSon/getsomething» не доступен из Javascript больше.

Как я могу решить эту проблему?

Включить Javascript используя абсолютный путь? Создать переменную в js как var fullPath = 'http://localhost/koh/'?

Какова наилучшая практика?

Leonti

ответ

4

Вот как я это сделал.

Я сделал функцию url_base, которая соответствовала бы url::base kohana, и поэтому она переключалась бы, когда я перешел с локального хоста и на производство.

Просмотр шаблона:

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

А потом в 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

Работает как очарование! Именно то, что мне нужно! – Leonti

2

(Немного поздно, но надеюсь, что все еще полезные) Вот еще один способ я использую, чтобы лучше организовать мои JS-ServerSide ВАР ,

Я помещаю где-то в начало некоторых основных переменных - например. в "до()" функции:

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

Теперь я могу добавить, когда мне нужно какой-либо дополнительной переменной:

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

И, наконец, в шаблоне этого Cleaniness:

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

использования, как это :

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