Установка глобальной переменной в Magento, в GUI? - PullRequest
9 голосов
/ 04 июня 2009

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

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

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

Ответы [ 5 ]

36 голосов
/ 16 июня 2009

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

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

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

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

  1. Создайте XML-файл в приложении / etc / modules
  2. Создать структуру папок в приложении / code / local / Companyname

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, которые считают пробел значимым, поэтому всегда лучше не включать пробелы в значения атрибутов ( true против true

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

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>

Таким образом, вы бы использовали тег

- это имя группы, в которой будет отображаться ваша переменная конфигурации. Группы - это раскрывающиеся списки Ajax, содержащие поля конфигурации. Например, в разделе «Общие» есть группа «Параметры страны» и группа «Локальные параметры». Опять же, проверьте существующие основные модули, если вы не знаете, как поместить значение в существующую группу.

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

<my_or_their_group />

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

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

Наконец, - это имя значения yoru conifg. Опять же, обратите внимание на атрибут translate . Применяются те же правила, что и выше.

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

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

Mage::getStoreConfig('design/my_or_their_group/my_config');     
17 голосов
/ 29 июля 2010

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');
1 голос
/ 08 октября 2010

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

Ред.

1 голос
/ 05 июня 2009

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

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

0 голосов
/ 02 марта 2013

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

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

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

Чтобы ваше собственное меню отображалось в разделе «Общие», вы должны сделать то же самое, как если бы вы получали свою собственную группу, или даже вкладку в верхней строке меню, вы должны дать себе Разрешение 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 «True Order Edit». Также есть: ytf и ytfeed имеют небольшие различия с их записями. Запись ytf - это то, что появляется, когда вы идете в Admin -> config и смотрите слева в группе General. ytfeed - это строка, которая открывается в центре страницы, когда вы нажимаете «Общие-> Youtube Feed»

<!-- 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/

Обновление: Я сделал расширение из этого ответа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...