OpenCart: Как сделать глобальную переменную?

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

<?php echo $global1; ?>

Я пробовал редактировать library/system.php, а также config.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'); 

А теперь в /catalog/view/theme/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 

person TheBlackBenzKid    schedule 06.03.2013    source источник
comment
вы можете использовать переменную $ _SESSION   -  person Alessandro Minoccheri    schedule 06.03.2013
comment
Я тоже думал об этом, но как бы это реализовать. Я не уверен в использовании переменных SESSION, когда я просто использую переменную, не являющуюся сеансом. Я не хочу устраивать для этого сеанс.   -  person TheBlackBenzKid    schedule 06.03.2013


Ответы (2)


вы можете использовать $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/header.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?>
person Chetan Paliwal    schedule 06.03.2013

Если вы просто хотите использовать статическое значение, вы можете просто использовать константу. Просто создайте его в своем файле (ах) 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') вместо того, чтобы использовать то, что считается более быстрым методом взлома.

person Jay Gilford    schedule 06.03.2013
comment
Джей, спасибо за ответ. Я четко упомянул, что не хочу использовать сеансы, это всегда будет статическая переменная, это URL-адрес CDN, поэтому не управляемый пользователем. Можете ли вы сказать мне, где я бы поместил сеанс в любом случае (для использования в будущем), а также вашу рекомендацию для строки вместо этого? - person TheBlackBenzKid; 07.03.2013
comment
Как мне добавить новое значение системной настройки? Вы имеете в виду создать плагин для админки, тогда да? - person TheBlackBenzKid; 07.03.2013
comment
Используйте vQmod, чтобы сгенерировать дополнительное поле, и поместите необходимый код контроллера и т. Д. В место настроек. Я не буду вдаваться в подробности того, как именно, это то, что легко получить из самого кода, и я уверен, что в Интернете уже есть примеры. - person Jay Gilford; 07.03.2013