среда, 21 августа 2013 г.

Razor в Composite C1 CMS 4.0 (11): Использование нескольких корневых папок для файлов Razor-функций

В прошлом сообщении мы научились менять корневую папку для .cshtml-файлов, которые служат Razor-функциями в Composite C1.

По умолчанию - это папка ~/App_Data/Razor. Но вы теперь можете использовать любую другую папку для этих целей.

Еще более интересный вариант, это создание нескольких корневых папок для Razor-функций. По крайней мере, это показывает насколько гибкая эта система в настройках своего GUI.

Использование нескольких корневых папок для файлов Razor-функций


Вкратце, у вас будет несколько экземпляров поставщика Razor-функций (под разными именами), которые будут привязаны к разным папкам.

Чтобы это сделать:
  1. Создайте новую папку для  файлов Razor-функций, например ~/App_Data/Shared/Razor, и скопируйте туда web.config из ~/App_Data/Razor.
  2. Теперь откройте ~/App_Data/Composite/composite.config и найдите такой элемент: configuration/Composite.Functions.Plugins.FunctionProviderConfiguration/FunctionProviderPlugins/add[@name="RazorFunctionProvider"].
  3. Ниже добавьте такой же элемент, но при этом задайте ему новое название в атрибуте name, напр.  "SharedRazorFunctions" и укажите другую папку в атрибуте directory, напр., ~/App_Data/Shared/Razor:

    <Composite.Functions.Plugins.FunctionProviderConfiguration>
      <FunctionProviderPlugins>
        <!-- др. настройки -->
        <add name="RazorFunctionProvider" directory="~/App_Data/Razor" type="Composite.Plugins.Functions.FunctionProviders.RazorFunctionProvider.RazorFunctionProvider, Composite" />
        <add name="SharedRazorFunctions" directory="~/App_Data/Shared/Razor" type="Composite.Plugins.Functions.FunctionProviders.RazorFunctionProvider.RazorFunctionProvider, Composite" />
        <!-- др. настройки -->
      </FunctionProviderPlugins>
    </Composite.Functions.Plugins.FunctionProviderConfiguration>
  4. Сохраните изменения и перезагрузите сервер  (Инструменты / Перезапустить сервер).
Это пока еще не все. Функции из той другой папки уже будут для работы в коде и т.п., но не видны в админке системы.

Давайте добавим их в разделе "Функции":
  1. Откройте ~/App_Data/Composite/composite.config и найдите такой элемент: configuration/Composite.C1Console.Elements.Plugins.ElementProviderConfiguration/ElementProviderPlugins.
  2. Добавьте еще один элемент указав другое название (name) и надпись для админки (label):

    <Composite.C1Console.Elements.Plugins.ElementProviderConfiguration rootProviderName="VirtualElementProvider">
      <ElementProviderPlugins>
        <!-- др. настройки -->
        <add razorFunctionProviderName="RazorFunctionProvider" type="Composite.Plugins.Elements.ElementProviders.RazorFunctionElementProvider.RazorFunctionElementProvider, Composite"
          name="RazorFunctionProviderElementProvider" />
        <add razorFunctionProviderName="SharedRazorFunctions"
          label="Shared Razor Functions" type="Composite.Plugins.Elements.ElementProviders.RazorFunctionElementProvider.RazorFunctionElementProvider, Composite"
          name="SharedRazorFunctionsElementProvider" />
        <!-- др. настройки -->
      </ElementProviderPlugins>
    </Composite.C1Console.Elements.Plugins.ElementProviderConfiguration>\
  3. Теперь в элементе ElementProviderPlugins найдите дочерний элемент add[@name="VirtualElementProvider"]/Perspectives/add[@name="FunctionsPerspective"]/Elements.
  4. Добавьте в него свой новый поставщик функций:

    <Composite.C1Console.Elements.Plugins.ElementProviderConfiguration rootProviderName="VirtualElementProvider">
      <ElementProviderPlugins>
        <!-- др. настройки -->
        <add type="Composite.Plugins.Elements.ElementProviders.VirtualElementProvider.VirtualElementProvider, Composite" name="VirtualElementProvider">
          <Perspectives>
          <!-- др. настройки -->
            <add name="FunctionsPerspective" tag="Functions" label="${Composite.Management, VirtualElementProviderElementProvider.FunctionsPerspective}" closeFolderIconName="Composite.Icons.functioncall" type="Composite.Plugins.Elements.ElementProviders.VirtualElementProvider.SimpleVirtualElement, Composite">
              <Elements>
              <!-- др. настройки -->
                <add providerName="SharedRazorFunctionsElementProvider"
                  name="SharedRazorFunctionsElementProvider" type="Composite.Plugins.Elements.ElementProviders.VirtualElementProvider.AttachProviderVirtualElement, Composite" />
                </Elements>
            </add>
          </Perspectives>
        </add>
      </ElementProviderPlugins>
    </Composite.C1Console.Elements.Plugins.ElementProviderConfiguration>
  5. Сохраните изменения и перезагрузите сервер  (Инструменты / Перезапустить сервер).
И новый элемент для Razor-функций из другой папки появится в админке параллельно с дефолтным.

< Информация об ошибках в Razor-функциях  | Замена корневой папки для файлов Razor-функций >

Комментариев нет:

Отправить комментарий