Модульные layout.xml под различные темы

При установке модуля, можно автоматически создать новую страницу Макета.
Сам layout.xml может располагаться как в app/addons/myadd/layout.xml так и в рамках каждой темы:
или design/themes/responsive/layouts/addons/myadd/layout.xml
или design/themes/abt__youpitheme/layouts/addons/myadd/layout.xml
или design/themes/abt__unitheme/layouts/addons/myadd/layout.xml

но проблема в том, что функция, копирующая файлы при установке модуля - не учитывает папку /layouts/ - http://94.130.79.130/i/20190326-125737-QE4oLXumMN.png

Просьба поправить это.

1 лайк

К сожалению, нам не удалось воспроизвести проблему.

Логика установки модуля не предусматривает копирование layout.xml в папку design/themes/[theme]/layouts/

файл layout.xml импортируется в базу и потом появляется в качестве вкладки на странице Дизайн > Макеты

Примером такого модуля является модуль Blog, в котором файл layout.xml корректно импортируется.

Возможно, мы говорим о разных функционалах. Если это так, то, пожалуйста, уточните.

Видимо, я неправильно описал проблему.

При создании модуля можно создать новую страницу Макета оперируя файлом layout.xml.

  1. В общем случае, этот файл может располагаться в двух местах:
    app/addons/my_changes/layouts.xml
    и
    design/themes/THEME/layouts/addons/my_changes/layouts.xml
app
├- addons
|  └- my_changes
|     └- layouts.xml (глобальный для каждой ТЕМЫ)
|
└- desing
   └- themes
        ├- responsive
        |  └- layouts
        |     └- addons
        |        └- my_changes
        |           └- layouts.xml (точечно можно задать только  для темы RESPONSIVE)
        |
        ├- abt__unitheme
        |  └- layouts
        |     └- addons
        |        └- my_changes
        |           └- layouts.xml (точечно можно задать только  для темы ABT__UNITHEME)
        |
        └- abt__youpitheme
           └- layouts
              └- addons
                 └- my_changes
                    └- layouts.xml (точечно можно задать только  для темы ABT__YOUPITHEME)



Почему я так решил, что в двух местах - по коду ядра cs-cart http://94.130.79.130/i/20190415-120533-QEx5wHtxjq.png

  • сначала смотрим layouts.xml в рамках Темы:
$theme = Themes::factory($theme_name);
$theme_addon_layouts_file = $theme->getContentPath("layouts/addons/{$addon_name}/layouts.xml");
  • если нет файла в рамках темы, смотрим в папку самого модуля
....
} elseif (file_exists(Registry::get('config.dir.addons') . $addon_name . '/layouts.xml')) {
    $addon_layouts_path = Registry::get('config.dir.addons') . $addon_name . '/layouts.xml';
}

  1. Я как разработчик, хочу МОДУЛЬНО для разных Тем задать разные layouts.xml, поэтому я должен делать вот такую структуру в соответствии с парадигмой cs-cart (http://94.130.79.130/i/20190415-124107-Lbr8Ta7039.png):
app
├- addons
|  └- my_changes
|     └- layouts.xml (оставляю некий универсальный layouts.xml - для сторонних Тем)
|
└- var
   └- themes_repository
      ├- responsive
      |  └- layouts
      |     └- addons
      |        └- my_changes
      |           └- layouts.xml (точечно можно задать только  для темы RESPONSIVE)
      |
      ├- abt__unitheme
      |  └- layouts
      |     └- addons
      |        └- my_changes
      |           └- layouts.xml (точечно можно задать только  для темы ABT__UNITHEME)
      |
      └- abt__youpitheme
         └- layouts
            └- addons
               └- my_changes
                  └- layouts.xml (точечно можно задать только  для темы ABT__YOUPITHEME)

  1. Так вот проблема в следующем: при установки модуля или темы cs-cart проверяет наличие layouts.xml в соответствии с п.1 и применяет их. Но при установке модуля не происходит копирование файлов из:
└- var
   └- themes_repository
      └- responsive
         └- layouts
            └- addons
               └- my_changes
                  └- layouts.xml (точечно можно задать только  для темы RESPONSIVE)

в

└- design
   └- themes
      └- responsive
         └- layouts
            └- addons
               └- my_changes
                  └- layouts.xml (точечно можно задать только  для темы RESPONSIVE)

Как мне, модульно поставлять layouts.xml индивидуально для каждой темы?

К сожалению, мне не совсем понятно, что вы имеете в виду.

Если вы хотите создать layouts.xml для конкретных тем, то вы можете использовать логику из п.1 вашего сообщения, т.е. расположить файл в папках design/themes/[theme]/layouts/addons/[addon]/layouts.xml

В этом случае вам необходимо для каждой темы создать необходимый layouts.xml

Уточните, пожалуйста, почему этот вариант вам не подходит.

В том случае, если вы не знаете какие темы установлены, то вам необходимо написать функцию, которая будет при установке модуля определять какие темы установлены, и для них создавать/копировать/перемещать файл layouts.xml

Так, как layouts.xml не дергается из папки var. Это не является багом.