понедельник, 10 января 2011 г.

Интеграция Composite C1 и nopCommerce

Как я уже писал, на данный момент в C1 нет своего модуля для создания интернет-магазина. Однако можно интегрировать сторонние решения. На сайте C1, есть статья о том, как интегрировать nopCommerce в C1.

По мотивам этой статьи и будет описана интеграция nopCommerce и C1.

Для интеграции мы воспользуемся сборкой nopCommerce 1.80 (no source), которая используется в статье-оригинале.


Условимся, что физически наш сайт C1 находится в папке C:\C1WebSite\CompositeC1.

Подготовим файлы nopCommerce
  1. Загружаем, распаковываем и собираем программу конвертации веб-форм в элементы управления ASP.NET с сайта C1.
  2. Распаковываем дистрибутив nopCommerce по такому пути: C:\nopFiles\nopCommerce\Original.
  3. Перемещаем exe-шник программы конвертации в C:\nopFiles и запускаем ее из командной строки с выведением результата в файл - вот так: 
C:\nopFiles\Composite.Commerce.nopCommerce.Convertor.exe > Handlers.xml

Файл Handlers.xml будет нужен дальше.

Копируем файлы
  1. В корне нашего C1-сайта, создаем папку nopCommerce и перемещаем все *.ascx и and *.ascx.cs файлы из C:\nopFiles\nopCommerce\Original в C:\C1WebSite\CompositeC1\nopCommerce. (Важно! Файлы *.aspx.cs перемещать не нужно.)
  2. Перемещаем остальные файлы, кроме указанных ниже, из C:\nopFiles\nopCommerce\Original в корневую папку сайта C:\C1WebSite\CompositeC1. (Важно! Эти 4 файла перемещать не нужно: Global.asaxNopCommerceStore.csprojNopCommerceStore.csproj.userweb.config)
  3. Также перемещаем такие папки в корневую папку сайта C:\C1WebSite\CompositeC1:
  • Administration
  • App_Themes
  • Bin
  • editors
  • files
  • images
  • nopCommerce
Редактируем web.config сайта

Открываем web.config из дистрибутива nopCommerce и копируем такие разделы и ключи в web.config нашего сайта:
  • configuration/ConfigSections
  • configuration/appSettings
  • configuration/connectionStrings
  • configuration/urlrewritingnet
  • configuration/compiltaion
  • configuration/authentication
  • configuration/anonymousIdentification
  • configuration/authorization
  • configuration/membership
  • configuration/roleManager
  • configuration/sessionState
  • configuration/siteMap
  • configuration/pages/namespaces
  • configuration/pages/controls
  • configuration/system.webServer/modules/remove[@name=«UrlRewriteModule»]
  • configuration/system.webServer/modules/add[@name=«MembershipHttpModule»]
  • configuration/system.webServer/modules/add[@name=«UrlRewriteModule»]
  • configuration/system.webServer/handlers
  • configuration/NopConfig
Теперь открываем Handlers.xml и копируем его содержимое в configuration/system.webServer/handlers в web.config сайта.

Создаем базу данных для nopCommerce
  1. Создаем базу данных на Microsoft SQL Server (бесплатная Express версия вполне подойдет).
  2. Запускаем установочные скрипты из дистрибутива nopCommerce в таком порядке:
    • nopCommerce_createDatabase.sql
    • nopCommerce_createData.sql
    • Для ознакомления можно заполнить базу демо-данными, также запустив nopCommerce_createSampleData.sql
  3. Загружаем с сайта С1 и запускаем еще один скрипт: UpdateTemplatePath.sql.
  4. Открываем ConnectionStrings.config в корневой папке нашего сайта и добавляем туда строку соединения с базой данных. Например:
<add name="NopSqlConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=nopCommerce;Integrated Security=False;Persist Security Info=False;User ID=user;Password=pass;Connect Timeout=120" />

Регистрируем функции
  1. Загружаем и распаковываем C1FunctionsForNopCommerce.zip.
  2. Копируем папки App_Code и nopCommerce в корневую папку нашего сайта.
  3. Заходим в админку нашего сайта в раздел Functions и добавляем внешние C# функции - для начала самый важный метод Shop - (в мастере Type: NopCommerce.Functions, Method nameShop).
Добавляем другие функции только уже из типа NopCommerce.Modules.Functions. Для навигация по онлайн-магазину нужно добавить хотя бы метод Header.

Запускаем магазин на сайте
  1. Заходим в админку сайта в раздел Content, выбираем Websites и добавляем новый веб-сайт (Add Website).
  2. В мастере указываем Shop в качестве названия страницы (Page title) и жмем Finish.
    Важно! Название должно быть именно такое - Shop.
  3. Когда страница открывается в редакторе, на вкладке Content добавляем функции NopCommerce.Modules.Header и NopCommerce.Shop (через Insert | Functions).
  4. Важно! Для версии 3.0 и выше - вставляем на страницу функцию  Composite.Web.Request.RegisterPathInfoUsage (в режиме редактора кода страницы).

    <f:function name="Composite.Web.Request.RegisterPathInfoUsage" xmlns:f="http://www.composite.net/ns/function/1.0" />
  5. Если нужно (при ошибках, например), размещаем разметку страницы в теги <asp:form></asp:form>. (См. "Using asp:form".)
  6. Сохраняем и публикуем страницу.
Еще один Важный! момент. Страницы на сайте, который интегрирует nopCommerce должны иметь расширение '.aspx'. Если у вас Composite C1 версии 3.0 и выше, вам нужно включить использование '.aspx' в качестве суффикса URL, так как он отключен по умолчанию в этих версиях:
  1. В разделе System, выбираем URL Configuration.
  2. Нажимаем Edit URL Configuration на панели инструментов.
  3. Указываем '.aspx' в поле Page URL Suffix.
  4. Нажимаем Save.
К сожалению (?), все страницы на вашем сайте теперь будут иметь  расширение '.aspx'.

Все. Теперь открываем сайт в браузере и заходим на страницу Shop.

Чтобы доступиться в админку самого nopCommerce'а на сайте, нужно к имени сайта добавить /Administration, например, http://www.contoso.com/Administration.

Проблема с кнопкой Confirm

Если не будет работать кнопка Confirm, при “покупке” товара, делаем следующее:
  1. В папке сайта C:\C1WebSite\CompositeC1\nopCommerce\Modules\ открываем файл CheckoutConfirm.ascx и заменяем CodeBehind на CodeFile.
  2. Там же открываем файл CheckoutConfirm.ascx.cs, находим метод OnPreRender и комментируем такую строку:
this.btnNextStep.Attributes.Add("onclick" , "this.disabled = true;" + Page.Clientscript.GetPostBackEventReference(this .btnNextStep, ""));


Послесловие

Понятно, что это решение - не самое лучшее. Но на данный момент это единственно мне известное.

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

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

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