2013-03-06 6 views
2

Я пытаюсь сделать две глобальные переменные в OpenCart. Я в принципе хочу, чтобы иметь возможность объявить их в любой из моих .tpl файловOpenCart: Как сделать глобальную переменную?

<?php echo $global1; ?> 

Я попытался редактирования, а также library/system.phpconfig.php путем добавления $global1="test" внутри моих файлов. Однако призывая, что в .tpl файлах не работает?

Пример, посмотрите на файл ниже, я хочу, чтобы иметь возможность вызывать эти переменные в любое время .. мне нужно редактировать config.php или что? В этом примере показан вызов $header, который используется в каждом файле .tpl.

not_found.tpl

<?=$header?> 
<div class="breadcrumb"> 
<? foreach ($breadcrumbs as $breadcrumb) { ?> 
    <? $breadcrumb['separator']; ?><a href="<?=$breadcrumb['href']?>"><?=$breadcrumb['text']?></a> 
<? } ?> 
</div> 
<div id="content"> 
    <?=$global1?> 
    <img src="/catalog/view/theme/default/image/error.png"/> 
</div> 
<?=$footer?> 

Обновлено

/catalog/controller/common/header.php

<?php 
class ControllerCommonHeader extends Controller { 


    protected function index() { 

     // NEW GLOBAL VARS 
     $cdnDefault="//www.gorgeouscouturedev.com/catalog/view/theme/"; 
     $currentUseLang = $this->language->get('code'); 

А теперь в /каталог/просмотр/тема /default/template/common/home.tpl

<?=$header?> 
<?=$column_left?> 
<?=$column_right?> 
<div id="content"> 

<? echo $cdnDefault ?> 
<? echo $currentUseLang ?> 

    <?=$content_top?> 
     <div class="flexslider"> 
      <ul class="slides"> 
       <li><img src="catalog/view/theme/default/image/desktop.png"/></li> 
       <li><img src="catalog/view/theme/default/image/blogger.png"/></li> 
      </ul> 
     </div> 
    <?=$content_bottom?> 
</div> 
<?=$footer?> 

И ошибки:

Notice: Undefined variable: cdnDefault in /catalog/view/theme/default/template/common/home.tpl on line 6 
Notice: Undefined variable: currentUseLang in /catalog/view/theme/default/template/common/home.tpl on line 7 
+0

вы можете использовать $ _SESSION переменной –

+0

Я думал об этом тоже но как я его реализую. Я не уверен в использовании переменных 'SESSION', когда я просто использую несеансовую переменную. Я не хочу делать сеанс для этого. – TheBlackBenzKid

ответ

1

вы можете использовать $GLOBALS супер глобальный массив

, например, объявить его первым в controller/common/header.php

$GLOBALS["1"] = "test"; 

затем использовать его в любом TPL файл как

<?php echo $GLOBALS["1"]; ?> 

о том, что header вещь, что header и five other files фактически объявлены в каждом файле контроллера (соответствующий каждому TPL файл), как этот

$this->children = array(
      'common/column_left', 
      'common/column_right', 
      'common/content_top', 
      'common/content_bottom', 
      'common/footer', 
      'common/header'  
     ); 

Ответ на обновленный вопрос

/catalog/controller/common/he ader.php

<?php 
class ControllerCommonHeader extends Controller { 


    protected function index() { 

     // NEW GLOBAL VARS 
    $GLOBALS["cdnDefault"]="//www.gorgeouscouturedev.com/catalog/view/theme/"; 
    $GLOBALS["currentUseLang"] = $this->language->get('code'); 

И теперь в /catalog/view/theme/default/template/common/home.tpl

<?=$header?> 
<?=$column_left?> 
<?=$column_right?> 
<div id="content"> 

<? echo $GLOBALS["cdnDefault"]; ?> 
<? echo $GLOBALS["currentUseLang"]; ?> 

    <?=$content_top?> 
     <div class="flexslider"> 
      <ul class="slides"> 
       <li><img src="catalog/view/theme/default/image/desktop.png"/></li> 
       <li><img src="catalog/view/theme/default/image/blogger.png"/></li> 
      </ul> 
     </div> 
    <?=$content_bottom?> 
</div> 
<?=$footer?> 
6

Если вы просто хотите использовать статическое значение, вы можете просто использовать константу. Просто создайте в файле config.php (ы), такие как

define('CDN_URL', 'http://cdn.someurl.com/'); 

Вы можете использовать

<?php echo CDN_URL; ?> 

где-нибудь в вашем приложении. Если вы хотите закодировать его так же, как в своем отредактированном вопросе, основной недостаток вашего кода заключается в том, что вы используете $cdnDefault вместо $this->data['cdnDefault'] в файле вашего контроллера, вызывая неопределенную проблему.Обратите внимание, однако, что эта переменная не является глобальной в малейшей степени, она просто кодируется, как и должно быть

На мой взгляд, правильный способ сделать это - создать новое значение настройки для редактирования в SYSTEM > SETTINGS в вашем администрация области, а затем вызвать его с помощью $this->config->get('config_value_here'), а не брать то, что считается более быстрый способ взломать

+0

Джей, спасибо за ответ. Я четко сказал, что не хочу использовать сеансы, это всегда будет статическая переменная, это URL CDN, поэтому не управляется пользователем. Можете ли вы сказать мне, где я бы поставил сессию в любом случае (для будущего использования), а также ваши рекомендации для строки? – TheBlackBenzKid

+0

Я обновил свой вопрос .. – TheBlackBenzKid

+0

Как бы добавить новое значение системной настройки? Вы имеете в виду построить плагин для панели администратора, чтобы потом «да»? – TheBlackBenzKid

Смежные вопросы