Пошаговое руководство по созданию флеш сайта

Иван Алексеев 15 Марта, 2011 4,506

* Используемые программы: Flash CS3, Photoshop CS3
* Сложность: средняя
* Приблизительное время выполнения: 3 часа


Сайт-портфолио имеет большое значение для любого современного художника, фотографа, дизайнера и даже музыканта. Он показывает серьезный подход к делу и профессионализм. Сегодня мы покажем как можно создать оригинальное и стильное фотопортфолио, на основе современной системы управления Flash контентом Moto CMS.

Мы будем использовать автономную версию Moto CMS, которая содержит разные утилиты, компоненты, встроенные примеры и чистые шаблоны сайта с разной структурой. И используем самый простой шаблон, то есть создадим сайт-фотопортфолио с нуля.

В данном руководстве мы затронем следующие темы:

* Создание контейнеров.
* Создание слотов (кнопка «Закрыть», простая кнопка).
* Создание модулей (музыкальный плеер и галерея изображений).
* Редактирование прелоадера сайта
* Создание страниц сайта и наполнение их контентом.

Так же расскажем о возможностях и функциональности Панели управления Moto CMS.

Нам понадобится:
* Adobe Photoshop;
* Adobe Flash CS3;
* Автономная версия Moto CMS (бесплатная пробная версия);
* Дизайн сайта в. PSD формате.

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

Главная страница сайта

Нажмите на ссылку в верхней части страницы и посмотрите на конечный результат, которого мы хотим добиться (логин/пароль: admin).

Шаг 1: Загрузите файлы Moto CMS

Чтобы начать создавать наш сайт фотопортфолио необходимо загрузить автономную версию Moto Flash CMS. Для того, чтобы повторить все действия из этого руководства и понять возможности Moto CMS пробной версии будет достаточно.

Шаг 2: Краткий обзор файлов Moto CMS

Вот краткий обзор файлов и папок Moto CMS:

* Components. В этой папке содержатся компоненты mxp, управляемые Adobe Extension Manager.
* Control panel. Содержит все файлы Панели управления.
* Docs. Эта папка содержит API документацию.
* Examples. Содержит 4 примера готовых flash сайтов, от самого простого до сложного, с модулем галереи, модулем новостей, музыкальным и видео плеером, контакт формой и т.д.
* Templates. 5 шаблонов, которые можно использовать для создания сайта на основе Moto CMS. Каждый шаблон имеет необходимый набор файлов и отличается по своей структуре. Сегодня мы будем использовать один из этих шаблонов, в частности шаблон № 1, в качестве основы нашего фотопортфолио.
* Readme файл, где описано с чего начать работу по созданию сайта с Moto CMS.

Шаг 3: Запуск на локальном хостинге

Нашим следующим шагом будет запуск шаблона сайта, на основе которого мы собираемся сделать наш сайт-портфолио. Для этого нам понадобится локальный веб-сервер. Мы используем WampServer. Он позволяет создавать веб-приложения с Apache, PHP и базы данных MySQL.

Для запуска шаблона сайта №1 просто загрузите на локальный сервер содержимое папки template_01 из каталога /templates/, а также содержимое папки controlPanel.

После этого мы переходим в Панель управления Moto CMS, указав свой URL в адресной строке браузера, добавив в конце /admin

Примечание: Сейчас вы не сможете посмотреть сайт, так как он еще не содержит ни одной страницы. Появится страница с 404 ошибкой.

Шаг 4: Редактирование config.xml

Все, что нам нужно сделать, это изменить ширину и высоту сайта и задать цвет фона.

Размер нашего проекта 980×800 пикселей. Для того, чтобы размер изменялся на большом экране, мы должны поставить «100%» для ширины и высоты сайта. А для того, чтобы он корректно отображался на экране с маленьким разрешением, мы должны указать минимальную ширину и высоту сайта (появятся полосы прокрутки). Фоновый цвет черный (# 000000).

<item name="ALLOW_FULL_SCREEN"><![CDATA[true]]></item>

<item name="WEBSITE_WIDTH"><![CDATA[100%]]></item>

<item name="WEBSITE_HEIGHT"><![CDATA[100%]]></item>

<item name="WEBSITE_MIN_WIDTH"><![CDATA[980]]></item>

<item name="WEBSITE_MIN_HEIGHT"><![CDATA[800]]></item>

<item name="FLASH_PLAYER_VERSION_REQUIRED"><![CDATA[9.0.23]]></item>

<item name="BACKGROUND_COLOR"><![CDATA[#000000]]></item>

Шаг 5: Изменяем style.css

Теперь мы должны открыть файл style.css и указать цвет фона (черный). Все остальное можно будет отредактировать с помощью Панели управления Moto CMS.

Шаг 6: Создаем preloader

Исходные файлы moto.xfl и website.xfl находятся в папках flamoto и flawebsite, соответственно.
Прелоадер для сайта следует создавать в moto.xfl. Прелоадер может быть простым клипом, состоящим из 100 кадров.

В панели Actions этого клипа мы пишем: “Stop ();” для первого кадра. Затем анимируем остальные кадры так как нам нравится.

Также пишем “Stop ();” в действиях первого кадра временной шкалы во fla.

Не забудьте указать размеры сайта (минимальную ширину и высоту) в свойствах файла moto.fla.

Наш следующий шаг заключается в создании красивой анимации исчезновения прелоадера. На последнем кадре мы должны запустить сайт путем активации функции “showWebsite ()”.

Откройте файл website.xfl и обновите прелоадер.

Шаг 7: Фон сайта

Откройте Медиатеку Moto CMS (Настройки> Медиатека) и наряду с другими необходимыми изображениями (для главной страницы, основных страниц или галереи) загрузите фоновое изображение с помощью кнопки “Добавить медиа”.

После этого возвращайтесь в Панель управления, создайте новую страницу и вставьте фоновое изображение с помощью кнопки “Фото”. Перетащите изображение и отцентрируйте его.


После этого в “Расположении” выберете размещение на всем сайте (On The Entire Website).

Шаг 8: Название и слоган

Загружаем новый шрифт

Для задуманного дизайна сайта нам необходимо загрузить новый шрифт – Myriad Pro Ultra-Bold. Для этого переходим в Настройки и выбираем Менеджер шрифтов.

Менеджер шрифтов позволяет пользователям управлять шрифтами сайта, которые хранятся в виде SWF файлов и могут быть загружены.

Перед загрузкой любого шрифта, мы должны в первую очередь преобразовать его в SWF формат. Для этого мы будем использовать Оnline Font Creator – удобное онлайн приложение, разработанное командой MotoCMS, которое позволяет с легкостью конвертировать TTF и OTF файлы в SWF. Все, что нам нужно сделать, это выбрать необходимый файл шрифта с .TTF или .OTF расширением, добавить его в Оnline Font Creator, нажать кнопку “Создать шрифт” и скачать готовый SWF файл, после чего мы можем использовать его на нашем сайте-портфолио.

Создаем название сайта и слоган

Как только новый шрифт загружен, вы можете создать название сайта и слоган, используя инструмент “Текст” и применяя необходимый шрифт. Чтобы создать слоган мы используем шрифт Tahoma, размер: 10, цвет: # 727272. После этого откорректируйте название и слоган сайта в соответствии с дизайном в .PSD.

Шаг 9: Добавляем изображение на главную страницу

Разместим изображение галереи на главной странице сайта. Для этого выбираем изображение из Медиатеки, нажав «Фото» в левой панели инструментов. При необходимости откорректируйте его местоположение в соответствии с дизайном главной страницы.

Шаг 10: Создаем нижнее меню

С помощью инструмента «Фигура» создаем серый узкий прямоугольник и с помощью инструмента «Текст» создаем кнопки на нем. Откорректируйте все в соответствии с дизайном вашего сайта.
Сохраните все изменения и посмотрите полученный результат, нажав на «Предпросмотр».
Также для создания меню можно воспользоваться встроенным модулем меню.

Шаг 11: Создаем контейнеры с контентом

Примечание: Контейнеры — это клипы в website.fla, где содержимое может быть добавлено динамически. Они могут быть 4-х видов: 1) контейнер с объектами, которые видны на всем сайте, 2) контейнер с объектами лейаута; 3) контейнер с объектами страницы; 4) контейнер с объектами всплывающего окна.

Шаблон сайта №1, который мы выбрали, имеет по умолчанию два контейнера: контейнер с объектами, видимыми на всем сайте и контейнер с объектами страницы. Если мы откроем файл website.fla мы их увидим:

Эти контейнеры отписаны в файле structure.xml. Убедитесь, что ширина 980, а высота 800 пикселей.

Контейнер с объектами, которые видны на всем сайте:

        <contentHolders>
                <holder id="1" type="website" x="0" y="0" width="980" height="800" locked="false" depth="10">
                        <name><![CDATA[On The Entire Website]]></name>
                </holder>
        </contentHolders>

Контейнер с объектами страницы:

        <contentHolders>
                <holder id="2" type="page" x="0" y="0" width="980" height="800" locked="false" depth="20">
                        <name><![CDATA[Content]]></name>
                </holder>
        </contentHolders>

Чтобы создать такие элементы сайта, как фон, название сайта, слоган и нижнее меню с серым прямоугольником, видимыми на всех страницах, мы должны разместить их в контейнере с объектами всего сайта. Мы легко это можем сделать при помощи Панели управления Moto CMS. Просто щелкните по нужному элементу и выберите его расположение – Website . (On The Entire Website).

Шаг 12: Создаем страницу «О нас»

Создаем пустую страницу

В левом верхнем углу нажимаем кнопку «Создать», которая позволит нам создать новую страницу.

Соединяем необходимые кнопки меню с новой страницей

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

Добавляем изображение фона на страницу «О нас»

Мы решили добавить на странице фон, черного цвета. Для этого переходим в Медиатеку, нажав кнопку «Фото» на левой панели, там выбираем предварительно загруженное изображение (обычный черный прямоугольник) и корректируем его расположение на странице в соответствии с дизайном.

Добавляем текст на страницу «О нас»

Добавляем текстовую информацию на страницу с помощь инструмента «Текст». Встроенный WYSIWYG-редактор показывает все, что вы делаете, поэтому форматирование текста не создаст никаких затруднений. Контактный адрес тоже достаточно легко добавить, нужно просто открыть Редактор ссылок и указать адрес электронной почты.

Когда все будет готово, не забудьте поместить элементы страницы «О нас» в контейнер с объектами страницы. Выделите каждый элемент по одному и выберите размещение: Page (page content).

Шаг 13: Изменяем изображение прелоадера

Возможно, вы заметили при переходе по страницам белые круговые прелоадеры. Для того, чтобы их настроить, откройте файл website.fla и пройдите в библиотеку. Щелкните правой кнопкой мыши на прелоадер и выберите Properties.

В окне свойств символа можно выбрать пункт “Edit Base class” и затем заанимировать прелоадер так как вы хотите. Мы же оставим прелоадер пустым и удалим графическое изображение.

Шаг 14: Анимация сайта

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

Анимируем контейнеры по умолчанию

Контейнер с контентом легко анимировать по временной шкале. Открываем файл website.fla и создаем анимацию постепенного появления для каждого контейнера.

Сначала, заанимируем основной контейнер с объектами, видимыми на всем сайте. Это слой website_holder_1. Мы делаем простую анимацию с прозрачностью, но чем-нибудь украсим его появление. Создаем второй ключевой кадр на слое, устанавливаем Alpha 0% для первого ключевого кадра (сделать его прозрачным), создаем промежуточный кадр от первого до второго, а затем добавляем смягчение.

Давайте точно также создадим анимацию для контейнера с объектами страницы (page_1_holder_2 слой), но сделаем его появление немного позже.

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

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

Так мы делаем анимацию появления и исчезновения контейнера.

Так как шрифт текста из системных шрифтов, мы должны изменить режим наложения с нормального слоя до уровня для всех экземпляров movieclip на слоях контейнеров.

Создаем дополнительные контейнеры и анимируем их.

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

Поскольку верхняя и нижняя части лежат на уровне всего сайта, то мы добавим два контейнера для этих двух частей. Перед добавлением контейнеров мы должны определить их размеры и расположение. Это легко сделать с помощью инструмента «Раскройка» (Slice) в Photoshop.

Верхняя часть имеет следующие рзмеры: x=0, y=0, ширина=980, высота=120.

Нижняя зона: x=0, y=765, ширина=980, высота=35.

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

После определения размеров контейнеров мы открываем файл structure.xml и добавляем новые контейнеры (на уровень сайта), указав их координаты, ширину, высоту и глубину.

        <contentHolders>
                <holder id="1" type="website" x="0" y="0" width="980" height="800" locked="false" depth="10">
                        <name><![CDATA[On The Entire Website]]></name>
                </holder>
                <holder id="3" type="website" x="0" y="0" width="980" height="120" locked="false" depth="12">
                        <name><![CDATA[Top Holder]]></name>
                </holder>
                <holder id="4" type="website" x="0" y="765" width="980" height="35" locked="false" depth="14">
                        <name><![CDATA[Bottom Holder]]></name>
                </holder>
        </contentHolders>

После добавления контейнеров в .xml файл, мы должны создать их в файле website.fla. Открываем файл website.fla и создаем новые слои для наших контейнеров. Порядок слоев должен соответствовать значениям глубины, которые мы установили в xml файле.

Мы можем скопировать пустой movieclip из слоя website_holder_1 и вставить его в website_holder_3 и website_holder_4.

В клипе устанавливаем те же координаты, что указаны в файле structure.xml.

Для 3-его контейнера: x = 0, y = 0;

Для 4-го контейнера: х = 0, y = 765.

Поскольку клип мы скопировали, остались старые названия. Мы изменяем их в соответствии с ID, так чтобы их было легко найти.

То же самое необходимо сделать и для контейнера 4.

На временной шкале первый ключевой кадр для контейнеров 3 и 4 ставим так, чтобы они начинали появление позже, чем контейнер с объектами всего сайта. Затем мы создаем вторые ключевые кадры и анимацию промежуточных кадров. Первый ключевые кадры содержат начальное положение контейнеров, а вторые ключевые кадры содержат заключительное положение контейнеров на сайте. Главный контейнер появляется из верхней части экрана, поэтому мы перемещаем его в первый ключевой кадр; нижний контейнер – с нижней стороны, поэтому его мы тоже перемещаем в первый ключевой кадр. И мы также добавляем easings для анимации промежуточных кадров.

Вот, что у нас получилось:

После этого мы должны добавить следующий код на слое actions на уровне первого ключевого кадра анимации наших контейнеров.

Moto.getInstance().getWebsiteHolder(3, website_holder_3);
Moto.getInstance().getWebsiteHolder(4, website_holder_4);

Затем компилируем сайт и обновляем Панель управления.

Размещаем объекты в контейнерах

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

Название сайта со слоганом необходимо разместить в верхнем контейнере, а меню сайта с серым прямоугольником в нижнем.

Изменяем содержание нижнего контейнера

Теперь желательно, чтобы на большом экране нижний контейнер придерживался нижней части экрана. Для этого мы должны переместить анимацию контейнера в другой клип, потому что, как вы знаете, мы не можем переместить анимируемый клип программно (анимация не будет работать). Назовем этот клип website_holder_4_c.

После этого перейдем на главную сцену, щелкнем по первым ключевым кадрам контейнеров 3 и 4 и отредактируем код.

Moto.getInstance().getWebsiteHolder(3, website_holder_3);
Moto.getInstance().getWebsiteHolder(4, website_holder_4_c.website_holder_4);

// Stage resize handler
stage.addEventListener(Event.RESIZE, resizeHandler);
resizeHandler(null);

function resizeHandler(event:Event):void
{
    website_holder_4_c.y = Math.max(765, Math.round(stage.stageHeight - 35));
}

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

Шаг 15: Анимируем контейнер с содержанием сайта

Для того, чтобы заанимировать содержание сайта, мы должны будем заанимировать контейнер с объектами всего сайта так же, как мы это делали для верхнего и нижнего контейнеров.

Шаг 16: Создаем страницу «Контакты»

Прежде чем создать новую страницу, давайте обновим шаблон страницы. Давайте сделаем шаблоном для всех новых страниц, страницу «О нас». Щелкните правой кнопкой мыши на странице «О нас» и выберите «Обновить шаблон страницы».

После того, как мы обновили шаблон страницы, нажмите на кнопку “Создать”, введите название страницы, заголовок, присвойте URL-адрес и выберете ее местоположение в структуре вашего сайта, так как это показано ниже, на скриншоте.

Страница «Контакты» готова. Теперь осталось отредактировать ее содержание с помощью удобного WYSIWYG-редактора, а с помощью редактора ссылок соединить ее с соответствующей кнопкой меню.

Шаг 17: Создаем простой слот

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

Сначала мы попробуем создать простой слот, а потом улучшить его.

Давайте начнем с кнопки «Закрыть», добавим ее на сайт как изображение, применим некоторые эффекты к ней и назначим действие «Перейти к странице» –> «Главная».

Анимируем кнопку «Закрыть», это совсем не сложно, потому что мы сделаем это, используя слот. Давайте создадим слот в файле website.fla. Для этого импортируем изображение кнопки «Закрыть» в библиотеку. В разделе Слоты мы должны создать новый movieclip и назвать его CloseButtonSlot.

Установим класс как CloseButtonSlot. Не нужно создавать новый класс, достаточно унаследовать класс AbstractMotoSlot. Просто скопируйте: com.moto.template.shell.view.components.AbstractMotoSlot, и вставьте его в поле Base Class.

Затем мы добавляем изображение кнопки «Закрыть» на сцену (CloseButtonSlot MovieClip должен быть открыт) и преобразовываем его в клип под названием CloseButtonIcon. Так как мы унаследовали наш слот от класса AbstractMotoSlot, то это дает нам основную анимацию. Сейчас мы сделаем красивый эффект разворачивания/сворачивания.

Следующим шагом будет создание нового слоя и создание ключевых кадров, в которые необходимо поместить “Stop ();”. Разместим основные метки “over” (между первым и вторым кадрами остановки) и “out” (между вторым и третьим ключевыми кадрами остановки) – см. скриншот:

Мы создаем те же ключевые и промежуточные кадры на слое с нашим клипом.

Например, наша кнопка «Закрыть» будет вращаться по часовой стрелке тогда, когда на нее навели курсор мыши и против, когда убрали.

Давайте добавим яркости при вращении и смягчение для анимации движения.

После того, как анимация сделана, мы компилируем файл website.fla с нашим новым слотом (Ctrl + Enter).

Для того, чтобы работать со слотом с помощью Moto CMS нам необходимо указать его параметры а файле: structure.xml:

librarySymbolLinkage=” ” – экспорт movieclip слота (Class name).
animated=”true” – атрибут, в котором указывается анимированный слот или нет.
resizable=”false” – есть ли логика для изменения размеров слота или нет.
locked=”false” – должен ли слот отображаться в Панели управления или нет.
<name><![CDATA[]]></name> – имя слота в Панели управления
<properties/>– свойства слота, которые расширяют функциональность. Мы не будем использовать его в данном примере.
<template/>– значения по умолчанию для всех свойств слота, необходимо добавить атрибут alpha=” “- прозрачность слота, от 0 до 1.

В нашем случае получилось вот что:

<slot id="1" librarySymbolLinkage="CloseButtonSlot" animated="true" resizable="false" locked="false">
        <name><![CDATA[Close Button]]></name>
        <properties/>
        <template alpha="1" />
</slot>

После этого перейдите в Панель управления и откройте любую страницу. В разделе “Слот” вы увидите все доступные слоты. Выберите слот кнопки Close и разместите его на странице вместо изображения кнопки «Close».

Когда слот выбран, справа появится панель свойств. Перейдите к «Действия» → “при нажатии” поставьте галочку «Включить» → «Перейти к странице» → «Главная».

Затем скопируйте слот и вставьте его на другие страницы, где необходима кнопка «Закрыть». Сохраните изменения и проверьте результат.

Шаг 18: Создаем более сложный слот

Создаем клип SimpleButtonSlot. Изменяем файл structure.xml

В нашем случае сложность слота — это добавление динамически изменяющихся параметров. Давайте создадим слот-кнопку с некоторыми переменными параметрами. Для этого открываем файл website.fla, создаем новый клип и называем его SimpleButtonSlot. Base Class прописываем также как в шаге 17.

Base Class: com.moto.template.shell.view.components.AbstractMotoSlot.

Затем добавляем текстовое поле с именем “Label” и плоскость с этой кнопкой. Преобразовываем плосткость в клип с именем “ButtonLabelPlane”.

Для удобства будем конвертировать Label в мувиклип и назовем его “labelHolder”, а затем преобразуем ButtonLabelPlane в другой мувиклип и назовем его “planeHolder.

Откроем файл structure.xml и добавим новый слот с двумя свойствами. Просто скопируйте и вставьте следующий код в разделе слотов:

<slot id="2" librarySymbolLinkage="SimpleButtonSlot" animated="true" resizable="true" locked="false">
        <name><![CDATA[Simple Button]]></name>
        <properties>
           <property id="1" type="htmlText">
              <name><![CDATA[Label]]></name>
           </property>
           <property id="2" type="color">
              <name><![CDATA[Color]]></name>
           </property>
                </properties/>
                <template alpha="1">
           <properties>
              <item propertyType="1">
              <item propertyType="2">
           </properties>
        </template>
</slot>

Создаем класс SimpleButtonSlot

Для того, чтобы обработать эти два свойства класса Base не достаточно. Поэтому нам необходимо создать новый класс. Создаем новый файл ActionScript в папке src/slots, называем его SimpleButtonSlot.as и добавляем следующий код:

package slots
{
        import com.moto.template.shell.view.components.AbstractMotoSlot;

        public class SimpleButtonSlot extends AbstractMotoSlot
        {
                public function SimpleButtonSlot()
                {

                }
        }
}

Теперь возвращаемся к клипу SimpleButtonSlot и указываем другой класс:
slots.SimpleButtonSlot.

После этого мы должны импортировать клип вот сюда:

package slots
{
        import com.moto.template.shell.view.components.AbstractMotoSlot;
        import flash.display.MovieClip;

                public class SimpleButtonSlot extends AbstractMotoSlot
                {
                         public function SimpleButtonSlot()
                         {

                         }

                }
}

Для того, чтобы обрабатывались оба свойства, мы должны переопределить функцию updateProperty (). В следующем фрагменте кода PropertyVO появляется со своим значением, типом, параметром и функцией getParameter (). Мы используем структуру “switch”, поскольку у нас есть два свойства: htmlText и Color.

package slots
{
        import com.moto.template.shell.model.vo.PropertyVO;
        import com.moto.template.shell.view.components.AbstractMotoSlot;
        import flash.text.TextField;

        import flash.display.MovieClip;

        public class SimpleButtonSlot extends AbstractMotoSlot
        {
                public function SimpleButtonSlot()
                {                       

                }

                override public function updateProperty(propertyVO:PropertyVO):void
                {
                        switch(propertyVO.propertyType)
                        {
                                case 1:
                                {
                                        // htmlText
                                        labelHolder.label
                                        break;
                                }

                                case 2:
                                {
                                        // color
                                        break;
                                }
                        }
                }
        }
}

Теперь давайте опишем наш TextField (labelHolder) и плоскость (planeHolder).

package slots
{
        import com.moto.template.common.utils.MotoUtils;
        import com.moto.template.shell.model.vo.PropertyVO;
        import com.moto.template.shell.view.components.AbstractMotoSlot;
        import flash.text.TextField;

        import flash.display.MovieClip;

        public class SimpleButtonSlot extends AbstractMotoSlot
        {
                private var _label:TextField;
                private var _plane:MovieClip;

                public function SimpleButtonSlot()
                {
                        _label = labelHolder.label;
                        _plane = planeHolder.plane;
                }

                override public function updateProperty(propertyVO:PropertyVO):void
                {
                        switch(propertyVO.propertyType)
                        {
                                case 1:
                                {
                                        // htmlText
                                        _label.htmlText = propertyVO.value;
                                        _label.embedFonts = MotoUtils.convertToBoolean(propertyVO.getParameter("embedFonts"));
                                        break;
                                }

                                case 2:
                                {
                                        // color
                                        MotoUtils.setColor(_plane, uint(propertyVO.value));
                                        break;
                                }
                        }
                }
        }
}

После этого нам нужно добавить функцию AutoSize:

package slots
{
        import com.moto.template.common.utils.MotoUtils;
        import com.moto.template.shell.model.vo.PropertyVO;
        import com.moto.template.shell.view.components.AbstractMotoSlot;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;

        import flash.display.MovieClip;

        public class SimpleButtonSlot extends AbstractMotoSlot
        {
                private var _label:TextField;
                private var _plane:MovieClip;

                public function SimpleButtonSlot()
                {
                        _label = labelHolder.label;
                        _plane = planeHolder.plane;

                        _label.autoSize = TextFieldAutoSize.LEFT;
                }

                override public function updateProperty(propertyVO:PropertyVO):void
                {
                        switch(propertyVO.propertyType)
                        {
                                case 1:
                                {
                                        // htmlText
                                        _label.htmlText = propertyVO.value;
                                        _label.embedFonts = MotoUtils.convertToBoolean(propertyVO.getParameter("embedFonts"));
                                        break;
                                }

                                case 2:
                                {
                                        // color
                                        MotoUtils.setColor(_plane, uint(propertyVO.value));
                                        break;
                                }
                        }
                }
        }
}

Так как наш слот изменяемого размера, давайте отцентрируем текст в плоскости. Для этого мы должны переопределить функцию SetSize (). Кроме того, нам необходимо изменить размер плоскости в зависимости от ширины текстовой метки. Мы должны вызвать функцию SetSize () для updateProperty (), когда свойство метки обновлено.

package slots
{
        import com.moto.template.common.utils.MotoUtils;
        import com.moto.template.shell.model.vo.PropertyVO;
        import com.moto.template.shell.view.components.AbstractMotoSlot;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;

        import flash.display.MovieClip;

        public class SimpleButtonSlot extends AbstractMotoSlot
        {
                private var _label:TextField;
                private var _plane:MovieClip;

                public function SimpleButtonSlot()
                {
                        _label = labelHolder.label;
                        _plane = planeHolder.plane;

                        _label.autoSize = TextFieldAutoSize.LEFT;
                }

                override public function updateProperty(propertyVO:PropertyVO):void
                {
                        switch(propertyVO.propertyType)
                        {
                                case 1:
                                {
                                        // htmlText
                                        _label.htmlText = propertyVO.value;
                                        _label.embedFonts = MotoUtils.convertToBoolean(propertyVO.getParameter("embedFonts"));
                                        setSize(_plane.width, _plane.height);
                                        break;
                                }

                                case 2:
                                {
                                        // color
                                        MotoUtils.setColor(_plane, uint(propertyVO.value));
                                        break;
                                }
                        }
                }

                override public function setSize(newWidth:Number, newHeight:Number):void
                {
                        _plane.width = newWidth;
                        _plane.height = newHeight;

                        _label.x = Math.round((newWidth - _label.textWidth) / 2);
                        _label.y = Math.round((newHeight - _label.textHeight) / 2);
                }
        }
}

Скомпилируйте сайт, чтобы сохранить изменения.

Анимируем слот

Открываем файл website.fla, переходим на основную сцену, а затем в клип SimpleButtonSlot. На Layer3 делаем три ключевых кадра и вставляем Stop ();. Размещаем основные метки “over” (между первым и вторым кадрами остановки) и “out” (между вторым и третьим ключевыми кадрами остановки).

Давайте заанимируем planeHolder (т.е. фон). Например, он может вылететь и остановиться. На временной шкале это будет выглядеть вот так:

Скомпилируйте сайт и посмотрите полученные изменения. Теперь мы можем работать со слотом объекта. Использование панель управления слота (справа), мы можем отредактировать свойства слота и применить к нему различные эффекты.

Вот хороший пример того, как можно использовать этот слот на нашем сайте. Мы использовали его на странице «О нас» при указании электронного адреса почты.

Шаг 19: Создаем музыкальный flash плеер

Примечание: Модули — анимированные элементы, полученные из слотов, которые доступны в библиотеке или могут быть загружены из внешнего файла SWF. Они обладают набором свойств, что позволяет пользователям легко ими управлять. По сравнению со слотами, модули имеют большое преимущество: каждый модуль имеет свою собственную панель управления. Моtо Flash CMS предоставляет пять типов панелей управления для создания собственных пользовательских модулей. Это означает, что Flash разработчики могут заниматься созданием интерфейса, так как остальное уже создано разработчиками Moto CMS.

Например, шаблон № 1, который мы используем, имеет встроенный модуль с музыкальным плеером. Вы можете легко добавить этот модуль на любую страницу и открыть панель управления, дважды щелкнув на нем.

Создание мувиклипа MusicPlayerModule. Изменение файла structure.xml

Давайте создадим простой музыкальный плеер с функцией включения/выключения. Открываем файл website.fla и создаем новый клип, называем его «MusicPlayerModule» и указываем базовый класс: modules.MusicPlayerModule. Затем добавляем на сцену и преобразовываем его в клип «musicPlayerIcon».

Открываем файл structure.xml и добавляем новый модуль. В разделе модулей добавляем следующий код:

<module id="2" type="mp3Player" librarySymbolLinkage="MusicPlayerModule" external="false" resizable="false" icon="images/modules/musicplayer_icon.png" smallIcon="images/modules/mp3_small_icon.png">
                        <name><![CDATA[Music Player]]></name>
                        <properties/>
                        <template alpha="1">
                                <properties/>
                                <data>
                                        <playlist isDataProvider="true"/>
                                        <autoLoadAndPlay>true</autoLoadAndPlay>
                                        <repeat>true</repeat>
                                        <defaultVolume>0.3</defaultVolume>
                                </data>
                        </template>
                </module>

Создаем класс MusicPlayerModule

Создаем новый файл ActionScript в папке src/modules и называем его MusicPlayerModule и добавляем следующий код, чтобы создать пустую оболочку для класса:

package modules
{
        import com.moto.template.modules.mediaPlayer.SimpleMusicPlayerModule;
        import flash.events.Event;

        import flash.display.MovieClip;

        public class MusicPlayerModule extends SimpleMusicPlayerModule
        {
                private var _icon:MusicPlayerModule;

                public function MotoWebsite()
                {
                        _icon = icon;

                        addEventListener(INITIALIZATION_ERROR, moduleInitializationErrorHandler);
                }

                private function moduleInitializationErrorHandler(event:Event):void
                {
                        //
                }

                override protected function getCurrentTrackURL():String
                {
                        if (getCurrentTrackData())
                                return pathPrefix + getCurrentTrackData().getPropertyValueByID(1);
                        else
                                return "";
                }
        }
}

Скомпилируйте сайт и перезагрузите Панель управления Moto CMS. В левой панели найдите Модули и выбрав музыкальный плеер разместите его на странице.

Дважды щелкните по модулю, чтобы открыть панель управления и загрузить пару треков (с помощью кнопки «Добавить»). Теперь вы можете слышать музыку, но не можете ее остановить.

Чтобы это исправить перейдем в клип MusicPlayerModule и создадим форму. Преобразуем его в ролик с названием «Кнопка». Мы будем использовать его для обработки событий нажатия и включения/выключения звука.

package modules
{
        import com.moto.template.modules.mediaPlayer.SimpleMusicPlayerModule;
        import flash.events.Event;
        import flash.events.MouseEvent;

        import flash.display.MovieClip;

        public class MusicPlayerModule extends SimpleMusicPlayerModule
        {
                private var _icon:MovieClip;
                private var _button:MovieClip;

                public function MusicPlayerModule()
                {
                        _icon = icon;
                        _button = button;

                        _button.buttonMode = true;
                        _button.addEventListener(MouseEvent.CLICK, iconClickHandler);

                        addEventListener(INITIALIZATION_ERROR, moduleInitializationErrorHandler);
                }

                private function moduleInitializationErrorHandler(event:Event):void
                {
                        //
                }

                private function iconClickHandler(event:MouseEvent):void
                {
                        switchVolume();

                        if (_muteSound)
                                _icon.alpha = 0.3;
                        else
                                _icon.alpha = 1;
                }

                override protected function getCurrentTrackURL():String
                {
                        if (getCurrentTrackData())
                                return pathPrefix + getCurrentTrackData().getPropertyValueByID(1);
                        else
                                return "";
                }
        }
}

Так как модуль Музыкальный плеер использует логику «общего объекта» и помнит включен ли звук или выключен, то при включении модуль должен проверить играет музыка или нет.

package modules
{
        import com.moto.template.modules.mediaPlayer.SimpleMusicPlayerModule;
        import com.moto.template.shell.model.vo.MotoObjectVO;
        import flash.events.Event;
        import flash.events.MouseEvent;

        import flash.display.MovieClip;

        public class MusicPlayerModule extends SimpleMusicPlayerModule
        {
                private var _icon:MovieClip;
                private var _button:MovieClip;

                public function MusicPlayerModule()
                {
                        _icon = icon;
                        _button = button;

                        _button.buttonMode = true;
                        _button.addEventListener(MouseEvent.CLICK, iconClickHandler);

                        addEventListener(INITIALIZATION_COMPLETE, moduleInitializationCompleteHandler);
                        addEventListener(INITIALIZATION_ERROR, moduleInitializationErrorHandler);
                }

                private function moduleInitializationErrorHandler(event:Event):void
                {
                        //
                }

                private function iconClickHandler(event:MouseEvent):void
                {
                        switchVolume();

                        if (_muteSound)
                                _icon.alpha = 0.3;
                        else
                                _icon.alpha = 1;
                }

                override protected function getCurrentTrackURL():String
        {
                        if (getCurrentTrackData())
                                return pathPrefix + getCurrentTrackData().getPropertyValueByID(1);
                        else
                                return "";
        }

                private function moduleInitializationCompleteHandler(event:Event):void
                {
                        if (_muteSound)
                                _icon.alpha = 0.3;
                        else
                                _icon.alpha = 1;
                }
        }
}

Шаг 20: Создаем Flash галерею изображений

Этот шаг очень обширен. Сейчас мы опишем как быстро вставить галерею с предоставлением всех необходимых исходных файлов.

Открываем файл structure.xml и вставляем модуль галереи.

<module id="3" type="simpleGallery" librarySymbolLinkage="GalleryModule" resizable="false" locked="false" icon="images/modules/gallery_icon.png" smallIcon="images/modules/gallery_small_icon.png" isContent="true">
                        <name><![CDATA[Gallery Widget]]></name>
                        <properties/>
                        <template alpha="1">
                                <data>
                                        <galleryData isDataProvider="true"/>
                                </data>
                                <properties/>
                        </template>
                </module>

Как только модуль добавлен, он должен появиться в Панели управления. Но для того, чтобы с ним работать, необходимо создать три класса: GalleryModule.as, Monitor.as и Scroll_bar.as, которые можно найти в папке /gallery_sources/.

Загрузите в папку src/modules эти классы (GalleryModule.as, Monitor.as и Scroll_bar.as).

В zip архиве вы также можете найти файл gallery.fla. Скопируйте movieclip галереи из gallery.fla в website.fla.

Как только все будет загружено на локальный сервер, вы можете начать работать с галереей. В левой панеле нажмите Модуль, выберите галерею изображений и разместите ее на странице. Дважды щелкните по модулю, чтобы открылась панель управления. Добавим несколько фотографий с помощью кнопки «Добавить».

Вы можете указать название и Alt для каждого изображения, добавить описание или соединить изображение ссылкой с любой страницей сайта, всплывающим окном или даже с внешним URL-адресом.

Сохраните изменения и посмотрите сайт.

Заключение

Вот мы и завершили рассказ о том, как создать с нуля сайт-фотопортфолио с помощью Moto flash CMS. Помните, что Моtо CMS предоставляет множество дополнительных модулей и виджетов, на основе которых можно создавать собственные модули, что позволяет экономить ваше время и сократить расходы. Кроме того, это Flash CMS также предоставляет все необходимые SEO инструменты, которые могут помочь вам оптимизировать ваш сайт, чтобы он занял более высокое место в поисковой выдаче.
И в нашем онлайн-магазине вы найдете более 80-ти профессиональных, функциональных и красивых шаблонов флеш сайтов.

Удачи в разработке.

Следуйте за нами: @MotoCMS_ru


Автор: Иван Алексеев
В компании MotoCMS Иван работает со дня ее основания. Признается, что успел создать не один сайт на MotoCMS ради досконального изучения админки и изложения всех хитростей работы с ней в блоге. Иван невероятно позитивен, предан своему делу, отзывчив. С удовольствием поболтает с вами о новых фичах, тулзах, пингах и других непонятных определениях на страницах блога.
  • http://prosto-site.org Просто флеш

    Я в восторге! Как приятно, что команда Moto CMS ни на одну секунду не останавливается на достигнутом!

    Ждем новых, еще более удобных решений и подробных мануалов!

  • http://cb9t.ru Евгений

    ууу…. тяжелая работа :) Молодцы!) Надеюсь, смогу как нибудь повторить.

  • Андрей

    Спасибо!
    Хорошая статейка!

    Объясните, пожалуйста, как работать с MotoDispathEvent.

    • Иван

      Добрый день, Андрей.
      У нас нет MotoDispathEvent, возможно Вы имели в виду MotoEventDispatcher? Работать с ним можно так же как и с обычным EventDispatcher, только из него можно получить события которые прошли ранее.

  • Иван

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

    • Иван

      Добрый день, Иван. Я рад, что Вам понравилась статья.
      Прелодер можно изменить с помощью флеша, в moto.fla файле. Смотрите “Шаг 6″ данной статьи.
      Звуковые эффекты можно отключить в Панели управления: “Настройки” – “Настройки веб-сайта”.

  • Иван

    Спасибо за ответ. Со звуком разобрался. Fla файл – это исходник, насколько я понимаю, а в файлах самого сайта что следует заменить?

    • Иван

      Moto.fla – это исходник, при компиляции он создает moto.swf. Его и нужно будет заменить на сайте.

  • Игорь

    Хорошая статья. Помогает понять. как работает кмс ка в общем. Можно еще пару таких написать вам:) но с разными вариантами сайтов. Есть неточности в статье, малость сбивают, но в целом неплохо и полезно :)

  • Игорь

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

    При добавление кода анимированных контейнеров 3 и 4 в шаге 14 можно было бы уточнить, что надо вставить код в слой actions. Такие уточнения ускорили бы познавание вашей кмс – ки в этом уроке :).

    Я почитал русскую документацию, спасибо :). Изучаю английскую версию, там побольше пока материала . Хотелось бы конечно весь текст на русском. Например, текст по созданию модулей меню и субменю.

  • Игорь

    Предложение в ШАГЕ 17
    Установим класс как CloseButtonSlot. Не нужно создавать новый класс, достаточно унаследовать класс AbstractMotoSlot. Просто скопируйте: com.flashmoto.template.shell.view.components.AbstractMotoSlot, и вставьте его в поле Base Class.
    “com.flashmoto.template.shell.view.components.AbstractMotoSlot” заменить на “com.moto.template.shell.view.components.AbstractMotoSlot”

    • Иван

      Спасибо, Игорь, за то что Вы помогли нам улучшить статью. Все недочеты исправлены.

  • http://irazvitie.com/ Инокентий

    Спасибо за пошаговое и понятное объяснение. Применю к своему сайту http://irazvitie.com/
    Очень полезная статья)