Пример использования модуля apps через настройку appServer

27.11.2013
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin
Автор:

Apps -  это модуль, который можно позиционировать как следующий шаг в развитии фич. Для нас, в частности, он представляется более удобным и понятным именно как инструментарий для добавления на сайт новых возможностей, и с его помощью эти добавления можно выполнять без какого-либо вреда для юзабилити. Но, что особенно важно, в качестве инструмента для работы модуль Apps будет понятен не только  искушённому друпалеру, но и обычному пользователю. Отныне - при помощи данного модуля - добавлять новый функционал ваши клиенты смогут просто с помощью одного клика (Install app). 
Обычному пользователю apps скорее всего напомнит chrome web store, где каждый выбирает себе то “приложение” к базовой версии CommerceBox, которое необходимо. Apps, заметим, состоит из двух частей - серверной и клиентской. Клиентская часть модуля выводит  список всех доступных к установке приложений, а также, сообщает пользователю о вышедших обновлениях. Серверную часть обеспечивает модуль appServer. Он занимается тем, что возвращает json обьект с данными по каждому app-у (c названиями, рейтингами, версиями и т.д.) клиентской части. Давайте рассмотрим всё это в деталях.

Настройка серверной части

Как описано выше, за серверную часть отвечает модуль appServer, с помощью которого можно через UI настроить apps-ы. Он создает словарь таксономии Server Type, а также два типа контента - App Release и App. Ниже мы раскажем для чего они предназначены.

После того как установлен сервер в словаре таксономии Server Type можно создать термин, который и будет неким сервером, который мы будем указывать на клиентской стороне.

Сам же app формируется с помощью ноды типа App Release, его настройка состоит из заполнения полей Name (required), Changelog, Logo, Screenshot, Manifest, Server type. Если с полями Name (required), Changelog, Logo, Screenshot все понятно и они говорят сами за себя, то в Manifest-е происходят самые важные действия. Чтобы его составить рекомендуем ознакомится с OAS (Open App Standards).

Для начала следует вникнуть в систему создания apps-ов: нам нужно указать не только модули, которые стоит скачать и установить (в манифесте это будет Dependencies), но также указать и кастомный модуль (в манифейсте он будет описыватся как downloadable и machine_name), который в своем .info файле будет содержать список dependencies[] всех Dependencies указанных в манифесте. На самом деле, этот модуль - единственный, который включится при инсталляции app-а на клиентском сайте, но так как в нём содержатся зависимости других модулей, то автоматически включатся и эти другие модули.

Разберем манифест на примере:

name = Test content
description = Creates test content
machine_name = app_test_content
version = 1.0
downloadable = app_test_content 1.0
author = internetdevels
author_url = http://www.internetdevels.com
dependencies[test_content] = test_content 7.0
downloadables[test_content 7.0] = http://example.com/commercebox_test_content.tar.gz
downloadables[app_test_content 1.0] = http://example.com/drupal_app/app_test_content.tar.gz
libraries[test_libery] = test_libery 7.0
downloadables[app_test_content 1.0] = http://example.com/drupal_app/app_test_content.tar.gz  

где:

name: название вашего app-а;
description: описание app-а;
machine_name: машинное имя нашего кастомного модуля (downloadable). По этому имени будет произведён поиск папки с модулем, а также .module файл;
version: номер версии приложения, которое будет отображаться в консоли приложения и на странице “Подробно”;
downloadable: ключ в массиве модулей, отвечает за то, чтобы был скачан правильный модуль описанный в machine_name;
author: имя автора app-а;
author_url: ссылка на страничку автора;
dependencies[key]: массив данных о скачиваемых модулях, key — машинное имя модуля, значение - ключ масива downloadable;
libraries[key]: массив данных о скачиваемых библиотеках, key — название библиотеки, значение - ключ массива downloadable;
downloadables[key]: массив скачиваемых елементов, key - ключ указанный в dependencies, libraries, downloadable, значение - ссылка на скачаваемый архив.

Стоит заметить, что в случае с версией модуля 7.x-1.0-beta7, если в манифесте указать dependencies[test_content] = test_content 7.0 и при этом не поставить пробел между названием и версией, то это даст ошибку и комментарий о невозможности найти такой модуль, в то время как с пробелом всё работает отлично.

Итак, с настройкой сервера мы закончили. Но вы, скорее всего, заметили, что присутствует ещё один созданный модулем тип контента - App - отвечающий за баннер, в котором будет выведен рекомендуемый апп. Особо нужно выделить  в нем поле Machine Name. Здесь указывается машинное имя, которое мы указывали в манифесте machine_name, ну и в поле releases следует указать название ноды, созданой в App Release. После этого в термине таксономии появится (в поле Featured App) созданный нами app и его можно буде указать как рекомендуемый.

Вот теперь создан сам сервер. Зайдите на страницу /app/query/%tid, где %tid - это номер вашего термина таксономии. Если вы всё сделали правильно, то должны увидеть страницу с json массивом вашего app-а и дальше можно приступать к настройке клиентской части, которая его обработает.

Настройка Клиентской части

Настройка клиентской части сводится к написанию hook_apps_servers_info:

function test_apps_servers_info() {
  $info =  drupal_parse_info_file(drupal_get_path('module', 'test') . '/test.info');
  return array(
    'first' => array(
      'title' => 'Test app',
      'description' => 'Let’s test app',
      'manifest' => 'http://example.com/app/query/3', // ссылка на ранее созданый вами сервер.
    ),
  );
}
Теперь, перейдя нас страницу /admin/apps, вы должны увидеть доступные apps-ы, для чего может понадобиться чистка кеша. Пользуйтесь и наслаждайтесь.
Данный механизм был реализован на базе сборки для интернет магазинов CommerceBox. Все, кому интересно увидеть apps-ы изнутри, могут свободно скачать и установить их, и вживую увидеть, как всё работает.
1 vote, Rating: 5
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin

Также по теме

1

Задача импорта контента часто бывает нетривиальной. Писать импорт "с нуля" для каждого случая далеко не оптимальный вариант, поэтому мы рекомендуем использовать уже существующие решения, например...

2

В даной статье описан процесс развёртывания CMS Drupal с использованием Oracle DB на Debian сервере.

3

Иногда ситуация складывается так, что возникает потребность в использовании обоих интернет-протоколов  HTTP...

4

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

5

Модуль rules позволяет нам выполнять нужные действия (actions) после выполнения определенных событий (​​events). В своем арсенале он...

Need a quote? Let's discuss the project

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join the people who have already subscribed!

Want to be aware of important and interesting things happening? We will inform you about new blog posts on Drupal development, design, QA testing and more, as well news about Drupal events.

No charge. Unsubscribe anytime