Установка глобальной переменной в Magento с помощью графического интерфейса?

Недавно я начал использовать Magento для клиентского интернет-магазина, и мне все еще нужно разобраться с его системами.

Интернет-магазин должен иметь несколько ссылок, а также получать информацию с другого домена, на котором находится корпоративный сайт. Я бы предпочел не жестко кодировать доменное имя или URL-адрес, а вместо этого определить его в каком-то месте и использовать это значение в шаблонах phtml во всем интернет-магазине. Это позволяет легко настраивать его, когда мы перемещаем сайт между URL-адресами разработки, промежуточной и рабочей версии.

Может ли кто-нибудь предложить способ Magento сделать это? Предпочтительно мы могли бы добавить поле в графический интерфейс конфигурации магазина в бэкэнде, аналогично тому, как устанавливается {{base_url}}. А может я неправильно мыслю?


person Martijn Heemels    schedule 04.06.2009    source источник
comment
Основываясь на отличном ответе Алана, я создал простое расширение канала YouTube. Прочтите ответ Алана, после чего вы увидите мой, где Алан помог мне сделать следующий шаг. Ссылка на пакет тоже есть.   -  person Chris K    schedule 06.03.2013


Ответы (5)


Magento предлагает (относительно) простую поддержку пользовательских значений конфигурации. Лучший способ, который я нашел для достижения этой цели, — создать один модуль magento, который содержит все ваши пользовательские значения конфигурации.

Как и в любом другом Magento, здесь много шагов, и любой неверный шаг может поставить вас (или меня!) в тупик.

Создайте пустой модуль Magento

Во-первых, вам нужно настроить модуль magento для хранения всех ваших пользовательских значений конфигурации. Создание модуля magento включает в себя

  1. Создайте xml файл в app/etc/modules
  2. Создайте структуру папок в app/code/local/Companyname

Название компании — это уникальная строка, которая служит пространством имен, и в большинстве руководств по magento рекомендуется использовать здесь название вашей компании. Для целей этого руководства я буду использовать «Stackoverflow». Везде, где вы видите строку Stackoverflow, замените ее своей уникальной строкой.

Итак, для шага 1 создайте файл в app/etc/modules с именем «Stackoverflow_Customconfig.xml» и поместите в него следующее:

<?xml version="1.0"?>
<config>
    <modules>
        <Stackoverflow_Customconfig>
            <active>true</active>
            <codePool>local</codePool>
        </Stackoverflow_Customconfig>
    </modules>
</config>

Случайный совет Magento: некоторые части системы magento считают пробелы важными, поэтому всегда лучше не включать пробелы в значения атрибутов (‹active›true‹/active› vs. ‹active› true ‹/active›

Далее создайте следующую папку

mkdir app/code/local/Stackoverflow/Customconfig
mkdir app/code/local/Stackoverflow/Customconfig/etc

И создайте файл в

app/code/local/Stackoverflow/Customconfig/etc/config.xml

со следующим содержанием

<?xml version="1.0"?>
<config>
    <modules>
        <Stackoverflow_Customconfig>
            <version>0.1.0</version>
        </Stackoverflow_Customconfig>
    </modules>
</config>

Поздравляем, вы только что установили новый модуль Magento. Если вы очистите кеш magento и перейдете к

System -> Configuration -> Advanced -> Disable Modules Output

вы должны увидеть свой модуль в списке.

Добавьте файл System.xml в свой модуль.

Далее мы добавим файл system.xml. Этот файл используется для добавления пользовательского значения конфигурации в magento, которое вы сможете получить в любом месте во время цикла запроса magento. Добавить файл в

app/code/local/Stackoverflow/Customconfig/etc/system.xml

Это содержит следующее

<config>
    <sections>
        <design>
            <groups>
                <my_or_their_group translate="label">
                    <label>A grouping of config values.  Make your own, or us an existing group.</label>
                    <frontend_type>text</frontend_type>
                    <sort_order>50</sort_order>
                    <show_in_default>1</show_in_default>
                    <show_in_website>0</show_in_website>
                    <show_in_store>0</show_in_store>
                    <fields>
                        <my_config translate="label">
                            <label>This will be my config's label</label>
                            <frontend_type>text</frontend_type>
                            <sort_order>50</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>0</show_in_website>
                            <show_in_store>0</show_in_store>
                        </my_config>
                    </fields>
                </my_or_their_group>
            </groups>
        </design>
    </sections>
</config>   

‹дизайн› — это название раздела, в котором будет отображаться ваша конфигурация. «Общие, Интернет, Дизайн, Настройка валюты и т. д.». По большому счету это будет строчная версия названия, т.е. "Общее" становится "общим", "Дизайн" становится "дизайном". Если вы не уверены, каким должен быть этот внешний тег, поищите в основных модулях magento. т. е. при поиске «Настройка валюты» обнаруживается упоминание в

app/code/core/Mage/Directory/etc/system.xml
<currency translate="label" module="directory">
    <label>Currency Setup</label>

Таким образом, вы должны использовать тег ‹currency/‹, а не более интуитивно понятный ‹currency_setup /›.

‹my_or_their_group translate="label"› — это имя группы, в которой будет отображаться ваша переменная конфигурации. Группы — это раскрывающиеся списки Ajax, содержащие поля конфигурации. Например, в разделе «Общие» есть группа «Параметры для страны» и группа «Местные параметры». Опять же, проверьте существующие основные модули, если вы не знаете, как поместить значение в существующую группу.

Вы также заметите здесь атрибут translate вместе с соответствующим тегом label. Это позволяет вам использовать любую строку, которую вы хотите, в интерфейсе HTML в качестве заголовка группы, но внутренне сохраните имя как допустимое имя тега XML. Наш тег называется

<my_or_their_group />

но в интерфейсе группа будет иметь название

Группа значений конфигурации. Создайте свою группу или создайте существующую группу.

Наконец, ‹my_config translate="label"› — это имя вашего значения конфигурации. Обратите внимание на атрибут translate. Применяются те же правила, что и выше.

Другая структура xml необходима и (в основном) используется для управления тем, какие входные данные HTML будут использоваться для вашей конфигурации. Если вам нужен определенный элемент интерфейса, найдите пример в основном модуле и скопируйте структуру XML.

Это позволит вам устанавливать и искать значения конфигурации в графическом интерфейсе Magento. Вы можете получить свои значения, используя статический метод getStoreConfig глобального объекта Mage и указав URI вашего значения конфигурации. URI создается с использованием раздела/группы/имени вашей конфигурации.

Mage::getStoreConfig('design/my_or_their_group/my_config');     
person Alan Storm    schedule 15.06.2009
comment
Удивительный подробный ответ ... просто любопытно (после прочтения ваших сообщений здесь и на вашем сайте), как вы во всем этом разобрались? Ты работаешь на Вариена или используешь какую-то другую черную магию :P - person Rick J; 16.06.2009
comment
Не сотрудник Вариана и не черная магия. Только тяжелая работа и много исследований кода (Mage::Log — ваш друг). - person Alan Storm; 17.06.2009
comment
Спасибо за подробный ответ Алан. Это отлично подойдет. - person Martijn Heemels; 22.06.2009
comment
Не так больно, как казалось сначала. Очень полезно! - person SeanDowney; 08.07.2009
comment
Удивительная самоотверженность... Интересно, что прямо рядом с этой вкладкой находится открытая в данный момент страница alanstorm.com/magento_default_system_configuration_values . Какое совпадение. Этот парень гений. - person Hendy Irawan; 06.01.2011
comment
Спасибо за подробный ответ, Алан. Раньше я делал это так, но позже понял, что гораздо проще использовать встроенную функциональность пользовательских переменных для простых переключений функций. - person thdoan; 05.10.2016

Magento предоставляет пользовательские переменные, начиная с версии 1.4.

Войдите в систему со стороны администратора, Система -> Пользовательские переменные -> создайте новую пользовательскую переменную с кодом «my_variable».

Введите содержимое HTML и обычный текст для этой переменной.

Вы можете отобразить пользовательскую переменную на страницах CMS, поставив {{customVar code=my_variable}}

Или на .phtml страницах:

$variableHtml = Mage::getModel('core/variable')->loadByCode('my_variable')->getValue('html');
$variablePlain = Mage::getModel('core/variable')->loadByCode('my_variable')->getValue('plain');
person anoop    schedule 29.07.2010
comment
использование пользовательской переменной в атрибутах продукта или категории было бы неплохо в magento, но мы использовали следующий модуль для решения этой проблемы scommerce-mage.co.uk/magento-custom-variable-anywhere.html. Теперь мы можем использовать пользовательскую переменную где угодно :) - person stevensagaar; 25.06.2015

Самый простой способ — добавить узел в XML-файл основной конфигурации magento. Но это не рекомендуется, так как это вызовет проблемы с обновлениями. Чтобы установить пользовательские значения без редактирования ядра .... перейдите по этой ссылке

Как переопределить значения конфигурации

person Rick J    schedule 05.06.2009
comment
Спасибо за хорошую ссылку. Я также нашел другой способ: добавить строку в таблицу core_config_data в базе данных и получить ее значение с помощью функции getStoreConfig(). Однако я не понял, как отобразить это поле в графическом интерфейсе администратора Magento. - person Martijn Heemels; 10.06.2009
comment
Martijn, добавьте ответ ниже (или, может быть, выше), который немного длиннее, чем позволяют комментарии в 600 символов. - person Alan Storm; 16.06.2009

Я слишком новичок, чтобы добавить комментарий к ответу Алана, но вот еще немного информации от Magento:

-Ed.

person Edison Software    schedule 08.10.2010

Алан, спасибо за ответ! Это был ключ, который открыл для меня тайну. Даже после того, как я прочитал ваше превосходное руководство. Поскольку я изо всех сил стараюсь не модифицировать основные файлы, я начал делать расширения для своего бизнеса электронной коммерции. И я получил один, который я считаю достаточно хорошим, чтобы выпустить его в народ, но я хотел иметь возможность настроить его в админке, чтобы не было необходимости редактировать файлы.

Я начал с вашего кода выше и увидел, что добавленное «меню» было не в «Общие», а в «Общие-Общие», или «Общие-Веб», «Общие-Дизайн» и т. д. Я хотел, чтобы моя вещь отображалась в «Общих». , но я не хотел делать как все и добавлять целую группу меню для своих расширений.

Если читатель пришел сюда из Google, просто желая разместить мои параметры где-нибудь в панели администратора, тогда читайте дальше (и именно поэтому я добавляю еще один ответ). Во-первых: сделайте то, что Алан говорит выше. Сделайте так, чтобы ваше меню отображалось в меню «Общие» -> «Общие» -> «Ваше меню». Примечание: вам нужно будет очистить кеш, А ТАКЖЕ выйти из системы, так как некоторая информация хранится в сеансе.

Чтобы ваше собственное меню отображалось в разделе «Общие», вы должны сделать то же самое, как если бы у вас была собственная группа, или даже вкладка в верхней строке меню, вы должны дать себе разрешение ACL в config.xml:

<!-- file: config.xml -->
<config>
    <adminhtml>
        <acl>
            <resources>
                <admin>
                    <children>
                        <system>
                            <children>
                                <config>
                                    <children>
                                        <ytf translate="title">
                                            <title>Youtube Feed</title>
                                        </ytf>
                                    </children>
                                </config>
                            </children>
                        </system>
                    </children>
                </admin>
            </resources>
        </acl>
    </adminhtml>
</config>

Вот мой system.xml, соответствующий конфигурации. Обратите внимание, что ytf — это родительское меню. Я смоделировал это на основе модуля TniyBrick «Редактирование истинного порядка». Также есть проблема: ytf и ytfeed имеют небольшие различия в своих записях. Запись ytf — это то, что появляется, когда вы переходите в «Администратор» -> «Конфигурация» и смотрите слева в группе «Общие». ytfeed — это «полоса», которая открывается в центре страницы, когда вы нажимаете «Общие-> Лента YouTube».

<!-- file: system.xml -->
<config>
    <sections>
        <ytf translate="label" module="ytfeed">
            <label>Youtube Feed</label>
            <tab>general</tab>
            <frontend_type>text</frontend_type>
            <sort_order>700</sort_order>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
            <groups>
                <ytfeed translate="label" module="ytfeed">
                    <label>Youtube Feed</label>
                    <sort_order>50</sort_order>
                    <expanded>1</expanded>
                    <show_in_default>1</show_in_default>
                    <show_in_website>1</show_in_website>
                    <show_in_store>1</show_in_store>
                    <fields>
                        <username translate="label">
                        <!-- Mage::getStoreConfig('ytf/ytfeed/username');  -->  
                            <label>YouTube Username:</label>
                            <comment>(or YouTube channel name)</comment>
                            <frontend_type>text</frontend_type>
                            <sort_order>10</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                        </username>
                    </fields>
                </ytfeed>
            </groups>
        </ytf>
    </sections>
</config>

Еще одна ссылка, которая мне очень помогла:
http://www.scorgit.com/blog/custom-options-in-a-magento-back-end-dropdown-menu/

Обновление: я сделал дополнение к этому ответу.

person Chris K    schedule 02.03.2013