ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
21 марта 2019 14:36
Вход Регистрация Забыли пароль ?

megainformatic cms social Руководство пользователя
Проект социальной сети megainformatic cms social РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ Заходим на сайт http://megainformatic.ru/webprojects/mcs_pb/ Чтобы войти в личный кабинет в форме ВХОД НА САЙТ вводим известные вам логин и пароль. После входа в ЛИЧНЫЙ КАБИНЕТ (дал
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Модуль отзывов/комментариев для вашего сайта

megainformatic - Модуль короткие ссылки short link

megainformatic - Работа с сокетами fsocket из php

megainformatic - Как создать игру Создание игровых панелей и индикаторов

megainformatic - Приключения Кости Коробкина - Как я провел лето - интерактивный комикс

megainformatic - Приключения Кости Коробкина - Как я провел лето - интерактивный комикс

megainformatic - Приключения Кости Коробкина - С новым годом - интерактивный комикс

megainformatic - Система управления сайтом на php - megainformatic cms admin files

megainformatic - обзор антивирусных средств защиты

megainformatic - как работает антивирус ?

megainformatic - Создание сайта для бизнеса

megainformatic - Новый взгляд на очевидные вещи

megainformatic - Разработка программ на c++

megainformatic - Немного о музыке

megainformatic - GET и POST запросы

megainformatic - для чего нужна карта сайта

megainformatic - Web Администрирование

megainformatic - Мысли о разном

megainformatic - Легко ли быть программистом

megainformatic - Глубины программирования на C++

megainformatic - Убираем лимит на размер импортируемого файла в PhpMyAdmin

megainformatic - Как создать torrent файл

megainformatic - Нужна ли валидация вашему сайту ?

megainformatic - Антивирус DrWeb

megainformatic - Калькулятор рассчёта стоимости зубопротезирования для стоматологической клиники

megainformatic - Что такое BitTorrent (БитТоррент)

megainformatic - Миссис Даутфайр 1993 фильм torrent

megainformatic - Как скачивать торрент-раздачу ?

megainformatic - Автотелега фильтр

megainformatic - Фильмы

megainformatic - Fahrengeit Фаренгейт игра 2006 для PC

megainformatic - Fez игра для PC 2013

megainformatic - Дневник памяти - фильм 2004

megainformatic - Scooter - The night - Video and Lyrics - Скутер - Ночь - Видео и лирика

megainformatic - Если всё же неудача

megainformatic - Смерть или искупление или избавление

megainformatic - По ту сторону

cj megainformatic - музыкальный альбом БЕСКОНЕЧНОЕ ДВИЖЕНИЕ ОЖИДАНИЕ И ДЕЙСТВИЕ

megainformatic - Костя Коробкин - Секретный проект - интерактивный комикс

megainformatic - Основы анимации во флеш на примере анимирования простейшей окружности

megainformatic - Парсер сайтов Введение

megainformatic - Я пишу музыку для себя и для продажи

megainformatic - Статьи на околомузыкальные темы - осень 2014 часть 1

megainformatic - рассказ - Чужие воспоминания - автор Синицин Андрей - 24.09.2014

megainformatic - Сайты живущие вне поисковых систем. Есть ли такие и как их найти ?

megainformatic - Game craft - проект разработки игровых и мультимедийных проектов

megainformatic - Game craft - моделируем scv

megainformatic - Game craft - моделируем scv - шаг 1 (часть 2)

megainformatic - Game craft - моделируем scv - шаг 2 (часть 3)

megainformatic - Game craft - Наложение текстуры на модель робота scv (часть 4)

megainformatic - Game craft - Прорисовка текстуры робота SCV шаг 5

megainformatic - Game craft - Экспорт модели из 3ds max в формат X

megainformatic - Game craft - отображение scv модели в формате x в d3d9-приложении

megainformatic - Game craft - управление игрой от Direct Input в d3d9 - приложении

megainformatic - Game craft - игровая камера в d3d9 - приложении

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 1

подробнее


[к содержанию] [другие статьи Тимонина Андрея]

Обеспечиваем доступ к объекту из любой точки программы. Singleton

автор: Тимонин Андрей

дата публикации на сайте Мега Информатик: 17.11.2012

Добро пожаловать в цикл моих уроков посвященных программированию.

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

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


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

static Object _myObject;

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

class A{
public: int count; // Объявление статической переменной в классе
};
...
int A:: count = 10; //Инициализация значением 10

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

class A{
int count; // Объявление статической переменной в классе
public: static void count() { return count;}
};
...
int A:: count = 10; //Инициализация значением 10
void f()
{
A a;
a::count();
}

От сухой теории перейдем к практике. Чтобы не разводить синглетоны под каждый тип объекта, воспользуемся вот таким шаблоном (шаблоны пишут в одной единице компиляции, в нащем случае h-файле):

//singleton.h

#pragma once

template class singleton
{
public:
static T& get()
{
static T theSingleInstance; // у класса T есть конструктор по умолчанию
return theSingleInstance;
}
};

Чтобы наш класс стал синглетоном, используем открытое наследование

//graphics.h
#pragma once
#include "singleton.h"
class Graphics : public singleton
{ ....

protected:
Graphics(void);
~Graphics(void);
,,,,
public:
void Metod();
};

Пример вызова открытого метода:

Graphics::get().Metod());

На этом статью заканчиваю. Надеюсь, эта информация была вам интересна.
C уважением, Андрей.

[к содержанию] [другие статьи Тимонина Андрея]

подробнее

Модуль подсчёта ключевых слов в статье


Доброго времени суток, Вам, читающим эти строки !!!

Как я и обещал в предыдущей статье - Быстрый подсчёт ключевых слов в статье

в этой статье я расскажу Вам как самостоятельно написать модуль для решения этой задачи.

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

На самом деле логика работы такого модуля достаточно проста и сводится к следующим основным шагам:

1.) Получить текст статьи из текстового файла

2.) Убрать из текста все символы кроме букв заменив их пробелами

3.) Разбить полученный текст на массив, собирая статистику по каждому слову.

Вот собственно и всё :))))

Ну а теперь код -

<?php

// 1.) Получить текст статьи из текстового файла

//имя файла статьи берем из значения параметра pf переданного по GET
$paper_file = substr($_GET['pf'], 0, 250);
if ( !$paper_file )
$paper_file = 'home.txt';

if ( file_exists($paper_file) )
{
$content = file($paper_file);
}

?>

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

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

Этот момент уже реализован в сервисе Онлайн-сервис подсчёта ключевых слов

Но не описан здесь.

Как реализовать выгрузку файла на сайт я уже описывал в статье - Выгрузка файла на сайт

Поэтому здесь я её касаться не буду.

<?php

// 2.) Убрать из текста все символы кроме букв заменив их пробелами

//заменяем спец. символы пробелами
function kg_replace_special_chars($line)
{
//определяем длину строки
$line_len = strlen($line);
//перебираем строку
for ( $i = 0; $i < $line_len; $i++ )
{
$symbol_code = ord($line[$i]);

//если символ - это буква -
if ( ($symbol_code > 63 && $symbol_code < 91) || ($symbol_code > 95 && $symbol_code < 122)
|| ($symbol_code > 190 && $symbol_code < 256) )
{
//ничего с ним не делаем
}
else {
//заменяем на пробел
$line[$i] = ' ';
}
}

return $line;
}

?>

Кстати, если вдруг Вам понадобится исследовать коды всех символов и спец символов из кодировки ASCII, то на всякий случай привожу небольшую функцию и для этих целей :)))

<?php

//выводим табличку кодов символов
function show_symbol_codes(&$view)
{
for ( $i = 0; $i < 256; $i++ )
{
$view .= '<span style="color: #0000ff;">' . chr($i) . '</span> --- '.$i.' ';
}
}
?>

И собственно последний шаг -

<?php

// 3.) Разбить полученный текст на массив, собирая статистику по каждому слову

$view = '';

//перебираем все строки статьи
$l = 0;
$words_statistic = array(); //найденные слова
$words_statistic_count = array(); //статистика найденных слов
foreach ( $content as $line )
{
//заменяем знаки препинания и прочие спец. символы пробелами
$line = kg_replace_special_chars($line);
//$view .= $line;

//разбиваем строку на слова
$words = explode(" ", $line);

//считаем количество слов
$words_count = count($words);
for ( $i = 0; $i < $words_count; $i++ )
{
//если слово уже есть в массиве - увеличиваем его статистику
if ( in_array($words[$i], $words_statistic) )
{
$words_statistic_count[$words[$i]] = $words_statistic_count[$words[$i]] + 1;
}
else {
//если слова еще нет в массиве слов - добавляем его туда
$words_statistic[] = $words[$i];
$words_statistic_count[] = $words[$i];
$words_statistic_count[$words[$i]] = 1;
}
}


$l++;

}


//show_symbol_codes(&$view);


//показать слова, у которых статистика больше заданного значения
$value = intval($_GET['v']);
if ( !$value )
$value = 1;

$count_words_statistic = count($words_statistic_count);
for ( $i = 0; $i < $count_words_statistic; $i++ )
{
if ( $words_statistic[$i] != '' )
{
if ( $words_statistic_count[$words_statistic[$i]] > $value )
$view .= $words_statistic[$i] . ' ' . $words_statistic_count[$words_statistic[$i]] . '|';
}
}
?>

Работать описанный код будет аналогично тому, как он работает тут - kg

И самое главное - после всех манипуляций не забудьте вывести значение переменной $view на страницу в нужном месте.

т. е. примерно так -

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<title>Keywords Generator</title>
</head>

<body>
<?php
echo $view;

?>
</body>
</html>

Собственно теперь Вы владеете всей информацией, чтобы создать такой модуль.

Желаю Вам удачи !!! :))))

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

подробнее

  [Все уроки 3ds max] [Галерея моделей] [далее]  
 
 

Основы 3D-анимации, экспорт скелетной анимации

дата публикации: 9.10.2007

Цели и задачи статьи: показать способы создания анимации в 3Ds Max 7.0 или выше (можно использовать и ранние версии, но с оговорками указанными ниже) и использования ее в Delphi DirectX - играх.

Системные требования

- Наличие среды Delphi 6, 7 или выше для компиляции исходного кода, наличие 3Ds Max 7.0 или выше для создания моделей и анимаций;

- Операционная система Windows 98SE/2000/XP sp2 или выше с установленным DirectX 8.1 или выше;

- минимум ПК уровня Pentium III с тактовой частотой 1000 МНz или выше, RAM 128 Mb и выше, 32 Mb Video RAM и выше, DirectX-совместимая звуковая карта, мышь.

- Рекомендуется наличие DirectX SDK 8.1 или выше (для изучения DirectX);

- Терпение, старание и желание создавать компьютерные игры.

Введение

Наверное нет смысла объяснять что игра без анимации - это всё равно что паровоз без колес. В современных играх применяется 2D и 3D анимация. И если 2D анимация у Вас не вызывает особых вопросов значит Вы готовы к изучению основ 3D анимации.

В DirectX SDK Вы найдете примеры реализации различных видов анимации - от 2D до 3D. 2D анимация и способ ее реализации показан в примере игры из DirectX SDK 8.1 адаптированной автором на Delphi 6-7 - Donuts3D. Ее можно с успехом применять для анимированных текстур (например вода, небо, лава и т.п.) и 2D-объектов используемых в 3D-сцене. Всё что требуется для создания 2D-анимации - это набор кадров и их последовательное отображение.

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

пример 2D-анимации - шагающий человечек

Ситуация с 3D-анимацией несколько иная. В 3D анимации учавствует уже не плоское изображение (хотя может учавствовать и оно), а трехмерная модель состоящая из некоторого количества объектов - вершин, граней, примитивов. Также как и в случае с 2D анимацией - мы имеем модель находящуюся в разных состояниях во времени. Эти состояния - кадры (frames). Анимацию можно производить непрерывно и постепенно меняя состояние нужного объекта в каждом кадре, а можно и ограничиться так называемыми ключевыми кадрами (keyframes).

пример 3D анимации - шагающий RoBoo

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

Итак, любая анимация 3D модели - это трансформация (смещение, вращение, масштабирование - Translate, Rotate, Scale) суб-объектов модели (вершин, граней, примитивов). Условно можно выделить следующие виды анимации -

- вершинная (или морфинг) - анимируются трансформации отдельных вершин.

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

- скелетная (Skinned Mesh) - относительно новый вид анимации (по крайней мере для новичков в 3D-программировании) включает в себя концепцию использования скелета. Суть ее заключается в том, что вся модель снова представляется как единый меш (Mesh). Внутрь меша внедрена другая - более примитивная модель называемая скелетом. Скелет состоит из отдельных примитивов называемых костями (Bones). Каждая вершина привязана к определенной кости (костям). Степень влияния отдельных костей на вершину называется весовым коэффициентом (Weights), представляется числом с плавающей точкой (тип Single) и лежит в диапазоне от 0 до 1. Сумма всех весов костей влияющих на данную вершину должна составлять 1. Кости совершенно не влияющие на данную вершину имеют весовой коэффициент для нее 0, влияющие >0. В Direct3D8 на вершину не должно влиять более 4 костей, а на практике часто встречается влияние только лишь одной кости. Анимируя скелет мы тем самым анимируем и связанные с данными костями вершины.

Все эти виды анимаций применяются в 3D-играх и имеют свои достоинства и недостатки. Морфинг - этой самый простой вид анимации с точки зрения объема необходимых вычислений. Но объем получаемых выходных файлов для анимации морфингом слишком большой. Поэтому для сокращения объема применяют ряд оптимизаций - уменьшение FPS (Frames Per Second) - частоты кадров, уменьшение количества вершин модели и различные способы упаковки информации об анимации, применение межкадровой интерполяции. Объектная анимация более удобна за счет сокращения объема выходных данных, но требует большей работы с моделями и больше вычислений. Скелетная анимация в свою очередь требует еще больше предварительной работы над моделью и еще большего количества вычислений, но объем анимированной модели значительно сокращается. Кроме того, скелетную анимацию можно использовать не только для одной, но и для многих других подобных моделей, что еще больше сокращает объем необходимых медиа-файлов игры.

Примеры анимаций

Анимация методом морфинга показана в DirectX SDK в примере приложения Dolphin. Адаптированное для Delphi приложение представлено в базовых уроках Delphi DirectX.

Примеры объектной и скелетной анимации мы с Вами создадим на протяжении данной статьи.

Создаем анимированные модели

Сначала поговорим о том, в какой формат будем экспортировать анимированную модель из 3Ds Max.

Для экспорта анимаций в произвольный формат можно воспользоваться возможностями MAXScript языка встроенного в 3Ds Max или даже написать собственный плагин. Но для этого Вам понадобится MAX SDK.

Если будем экспортировать в формат X с использованием плагина из DirectX SDK 9.0 - DXExtensionsMax.gup то столкнемся с проблемой того, что объектная анимация экспортируется без проблем (для Direct3D9), а вот скелетная - увы почему-то не поддерживается (даже для Direct3D9!). Для анимации вершин нужно выводить каждый кадр в отдельный файл, а затем все это оптимизировать и упаковывать в один файл с анимированной цепочкой кадров.

Поэтому для экспорта скелетной анимации придется писать свой плагин или экспортер. Можно на первых порах воспользоваться и сторонними экспортерами, например, Я нашел в Интернете экспортер PandaDXExport. Этот экспортер устанавливается точно также как и DXExtensionsMax.gup Но он требует очень аккуратного обращения. К сожалению отсутствует исходник экспортера. Но это уже личное дело его автора, потому что экспортер распространяется бесплатно! Подготовка моделей для экспорта должна вестись очень аккуратно, иначе это приведет к нарушениям в полученной экспортированной модели. Ниже Мы попытаемся разобраться в проблемах экспорта с помощью PandaDXExport и обойти возможные ошибки и сложности.

Для экспериментов с экспортом Вам понадобится следующая модель - roboo (60 Кб). шагающий двуног

Это просто "Шагающий двуног" - бокс с вычлененными при помощи Bevel и Extrude двумя конечностями, с внедренным скелетом из двух конечностей и базовой кости. Также содержатся объекты Dummy как захваты для управления анимированием. О моделировании персонажей будет рассказано в отдельных статьях посвященных урокам по 3Ds Max.

 
Итак, предположим, что Вы уже скачали архив roboo и распаковали например, в папку SkinnedMeshExperim, установили плагин PandaDXExport.
 
Откройте файл roboo_anim_go.max из 3DS Max 7 (или выше) и попробуйте экспортировать его командой File > Export > Panda DirectX (название этого пункта будет зависеть от того, что вы пропишете в конфигурационном файле plugin.ini в папке установленного 3Ds Max).
 
Экспорт скелетной анимации Пандой
 
Когда Вы введете подходящее имя и нажмете кнопку Save (Сохранить) перед Вами появится окно параметров экспорта Панды. Задайте следующие параметры экспорта -
 
 
 
 
 
И нажмите ОК. При этом модель должна благополучно экспортироваться в файл X с именем, которое Вы указали.
 
Для проверки результата экспорта можно воспользоваться утилитой MeshView из DirectX SDK 8.1 или DirectX Viewer из DirectX SDK 9.
 
Кроме того, поскольку целью нашего экспорта является использование анимаций в Delphi DirectX 3D-игре, мы проверим проигрывание экспортированной анимации в приложении SkinnedMesh. (1,6 Mb).
 
Для компиляции и исполнения Вам понадобятся файлы из архива с ОБЩИМ КОДОМ (772 Кб). Замечания по компиляции и исполнению читайте в readme.txt вложенный внутри данного архива!
 

В папке архива SkinnedMesh после распаковки вы найдете папку Media. В ней содержатся три примера анимации - nx4.x, tiny.x и robooPDX.x.

nx4 - подлодка из проекта Тайны Морских Глубин: Операция Тайфун, показана анимация объектов - вращающихся винтов;

tiny.x - оригинал из DirectX SDK 8.1, 9;

robooPDX.x - то, что вы должны получить в процессе экспорта модели из файла roboo_anim_go.max

 

Для проверки данных анимированных моделей откройте файл проекта SkinnedMesh.dpr из среды Delphi, откройте unit SkinnedMeshUnit.pas, в классе CMyD3DApplication найдите реализацию функции InitDeviceObjects найдите строчку кода m_szPath := 'Media\tiny.x';

И задайте другую модель из имеющихся - nx4.x или robooPDX.x

Перекомпилируйте приложение и запустите полученный исполнимый файл. Если получаете ошибку об отсутствии файла D3DX81ab.dll скопируйте этот файл из папки с ОБЩИМ КОДОМ в папку с исполнимым файлом SkinnedMesh.exe и снова запустите приложение SkinnedMesh.exe.

 
пример работающего приложения
 
Roboo экспортировался в Х без проблем. Остановимся теперь на экспорте более сложных, но близких к реальным игровым приложениям примерах моделей.
 
Модели должны быть очень аккуратно подготовлены к экспорту. Что это значит? Это значит что любые огрехи в анимации или моделировании непременно скажутся на качестве выходной модели если вообще не приведут к ее порче. Чтобы продемонстрировать Вам неверный экспорт и ошибки скачайте архив с некорректной моделью - uncorrect_model (115 Кб).
 
Распакуйте архив в какую-нибудь папку и откройте файл human_skeleton_animate_go.max из 3Ds Max. Попробуйте экспортировать в формат X экспортером PandaDXExport.
 
Полученную модель проверьте в приложении SkinnedMesh или утилитами MeshView из DirectX SDK 8.1 или DirectX Viewer из DirectX SDK 9.
 
пример некорректной модели
 
Налицо сразу 3 ошибки - часть головы оторвана и движется вместе с рукой; периодически мелькает нулевая позиция меша - с разведенными в стороны руками; отсутствует текстура.
 
Корни данной некорректной модели лежат в основе ее создания. Чтобы избежать создания таких ошибок рассмотрим процесс подготовки модели и ее скелета более подробно.
 
[далее]
 
     
  [Все уроки 3ds max] [Галерея моделей] [далее]  
     
подробнее

Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 16

Онлайн-комикс Костя Коробкин - В гостях у тёти Светы - интерактивный комикс (kk as).

- Ну ладно, уже звонок я побежала !

Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (- интерактивный комикс (kk as) - онлайн комикс - страница 16

если кликать картинку она будет последовательно меняться в размерах от 620 до 2048 пиксель.

[страница 1][страница 2] [страница 3] [страница 4] [страница 5] [страница 6] [страница 7] [страница 8] [страница 9] [страница 10] [страница 11]  [страница 12] [страница 13]  [страница 14] [страница 15] [страница 16] [страница 17] 


Как создать инсталлятор для собственной cms ?

Итак, Вы написали свою cms. Если нет - можете взять мою бесплатную - megainformatic cms free

Правда для megainformatic cms free инсталлятор не требуется вообще !!! Сайт созданный на базе неё работает без my sql только на файлах. Поэтому вся установка сводится к копированию файлов системы на ваш хостинг.

Для более продвинутых вариантов cms, использующих базы данных my sql - а такие более распространены (megainformatic cms, megainformatic cms express и производные), в задачу инсталлятора будет входить создание первоначальной структуры базы данных будущего сайта без участия пользователя.

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

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

В данном уроке мы создадим такой простейший инсталлятор, который будет:

1.) запрашивать пользователя данные доступа к новой базе данных для сайта
2.) создавать первоначальную структуру базы данных нового сайта
3.) обновлять содержимое файла настроек settings.php


Рассмотрим теперь более подробно как организуется процесс установки сайта с помощью инсталлятора.

Во-первых в дистрибутив вашей cms добавляется папка install, которая будет содержать как минимум файл install.php выполняющий все необходимые шаги процесса установки.

В нашем примере таких шагов будет даже 4:

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

2) Поля для ввода данных доступа к созданной базе данных и адрес сайта (тут думаю всё тоже понятно - пользователь должен ввести некоторую информацию о имени базы данных, имени пользователя, пароле, сервере и адресе сайта) - эту информацию инсталлятор будет использовать для автоматического создания структуры базы данных и заполнения её необходимыми данными

3) Непосредственная работа инсталлятора по созданию структуры базы данных и заполнению её необходимыми данными (это собственно скрипт в файле install.php, который будет делать всю необходимую работу уже без прямого участия пользователя);

4) Завершающий шаг установки - инсталлятор создаст файл settings.php, содержащий все необходимые настройки для правильной работы сайта, а также создаст необходимые данные, которые будут свидетельствовать об успешном выполнении установки. (суть работы скрипта install.php тут сводится к созданию файла settings.php с необходимым содержимым, а также созданию специального файла-флага успешного окончания установки, пользователю также выдается сообщение об успешном окончании установки и необходимости удаления папки install с сайта, т. к. её присутствие после успешного выполнения установки сайта становится крайне нежелательным, а сам инсталлятор естественно эту операцию сделать не может).



Мы рассмотрели то, что нужно сделать в теории, а теперь перейдём к практике.

В папке дистрибутива вашей cms создаем подпапку install и помещаем в неё файл install.php.

В файл install.php заносим следующий код -

<?php $install_system_name = 'megainformatic cms express'; ?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Установка <?php echo $install_system_name; ?></title>

<style>

#main {

width: 100%;

margin: 0;

padding: 0;

font-size: 12px;

color: #000000;

background: #ffffff;

font-family: Verdana, Arial, sans-serif;

font-weight: normal;

text-align: center;

}

#container {

width: 800px;

background: #fae3a6;

margin: 0 auto;

}

#desc {

width: 600px;

text-align: left;

margin: 0 auto;

}

#db_connect_form {

width: 480px;

text-align: left;

margin: 0 auto;

background: #cecece;

}

.blue_text {

color: #1c71ad;

}

.orange_bold_text {

color: #ff8e15;

font-weight: bold;

}

.start_install_btn {

color: #ffffff;

border: 2px #ffffff solid;

background: #12be16;

}

</style>

</head>

<body>

<div id="main">

<div id="container">

<?php

/////////////////////////////////// функции

//разворачиваем данные в базе данных сайта

function deploy_database_data()

{

$result = 0;

global $dbhost;

global $dbuser;

global $dbpassw;

global $dbsite;

$papers = array();

if ($rc = mysql_connect($dbhost, $dbuser, $dbpassw))

{

mysql_select_db($dbsite);

//$table = PAPERS_TABLE;

/*$sql = 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";';

$s = mysql_query($sql);

if ( !$s )

{

die('Invalid query: ' . mysql_error());

return $result;

}*/

$sql = 'CREATE TABLE IF NOT EXISTS papers (

pageid int(11) NOT NULL AUTO_INCREMENT,

pagetitle varchar(255) NOT NULL,

pagefile varchar(255) NOT NULL,

UNIQUE KEY pageid (pageid)

) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;';

$s = mysql_query($sql);

if ( !$s )

{

die('Invalid query: ' . mysql_error());

return $result;

}

mysql_close($rc);

}

if ($rc = mysql_connect($dbhost, $dbuser, $dbpassw))

{

mysql_select_db($dbsite);

$sql = "INSERT INTO papers (pageid, pagetitle, pagefile) VALUES

(1, 'CMS Мега Информатик', 'papers/home.txt'),

(2, 'Подготовка макета сайта', 'papers/maket/maket.txt'),

(3, 'Верстка созданного макета', 'papers/verstka/verstka.txt'),

(4, 'Добавление модулей обеспечивающих функционал', 'papers/modules/modules.txt'),

(5, 'Основы добавления контента на сайт, управления и поддержки сайта', 'papers/content/content.txt'),

(6, 'Проверка работы сайта, установка на хостинг', 'papers/hosting/hosting.txt'),

(7, 'Основы продвижения созданного сайт', 'papers/promo/promo.txt'),

(8, 'Мега Информатик - Создание шаблонов', 'papers/templates/templates.txt'),

(9, 'Создание интернет-магазина', 'papers/shop/shop.txt');";

$s = mysql_query($sql);

if ( !$s )

{

die('Invalid query: ' . mysql_error());

return $result;

}

mysql_close($rc);

$result = 1;

}

return $result;

}

//создаем файл settings.php с конфигурацией сайта

function create_config()

{

$result = 0;

global $dbhost;

global $dbuser;

global $dbpassw;

global $dbsite;

global $site_url;

$data = '<?php'.PHP_EOL;

$data .= '/* ====================================================='.PHP_EOL;

$data .= 'megainformatic cms express 14.04.2012'.PHP_EOL;

$data .= 'http://www.megainformatic.ru'.PHP_EOL;

$data .= 'Автор: Синицин Андрей Сергеевич (megainformatic)'.PHP_EOL;

$data .= '***************************'.PHP_EOL;

$data .= 'файл настроек'.PHP_EOL;

$data .= '====================================================

*/'.PHP_EOL;

$data .= '//настройки доступа к бд'.PHP_EOL;

$data .= '$site_url = \''.$site_url.'\'; //пропишите адрес к вашему сайту'.PHP_EOL;

$data .= '$dbhost = "'.$dbhost.'"; //сервер базы данных обычно 127.0.0.1 либо localhost'.PHP_EOL;

$data .= '$dbsite = "'.$dbsite.'"; //сюда нужно вписать имя созданной вами для сайта базы данных'.PHP_EOL;

$data .= '$dbuser = "'.$dbuser.'"; //это имя пользователя базы данных - для локального сайта можно вписать root'.PHP_EOL;

$data .= '$dbpassw = "'.$dbpassw.'"; //пароль доступа к базе данных, для локального сайта можно не использовать'.PHP_EOL;

$data .= '//набор доступных шаблонов'.PHP_EOL;

$data .= '$templates = array(\'magic\', \'orange\', \'green\', \'blue\');'.PHP_EOL;

$data .= '//имя шаблона по-умолчанию'.PHP_EOL;

$data .= '$template_name = "magic";'.PHP_EOL;

$data .= 'if ( isset($_POST[\'template\']) && $_POST[\'template\'] != "" )'.PHP_EOL;

$data .= '{'.PHP_EOL;

$data .= ' if ( in_array($_POST[\'template\'], $templates) )'.PHP_EOL;

$data .= ' $template_name = $_POST[\'template\'];'.PHP_EOL;

$data .= '}'.PHP_EOL;

$data .= '$template_path = "design/".$template_name;'.PHP_EOL;

$data .= '?>'.PHP_EOL;

$config_filename = 'settings.php';

//выводим данные в файл

$cfg_handler = fopen($config_filename, "w");

$result = fwrite($cfg_handler, $data);

fclose($cfg_handler);

return $result;

}

//создаем файл-флаг успешного завершения установки

function create_install_end_flag_file()

{

$result = 0;

global $istall_ended_filename;

$data = 'installation ended ok'.PHP_EOL;

//выводим данные в файл

$flg_handler = fopen($istall_ended_filename, "w");

$result = fwrite($flg_handler, $data);

fclose($flg_handler);

return $result;

}

/////////////////////////////////// исполнение

//логика работы установщика сайта

/*

0) НАЧАЛО УСТАНОВКИ

1) проверяем была ли нажата кнопка start_install

2) если да, то пробуем получить доступ к базе данных с указанными параметрами

3) если доступа нет - выводим предупреждение

4) если доступ есть - в базе данных сайта создаем все необходимые таблицы и заносим в них информацию

5) создаем в корне сайта файл settings.php и заносим в него всю необходимую информацию

6) после успешного выполнения шагов 4 и 5 выдаем сообщение об окончании установки и предупреждение о необходимости полностью удалить

с сайта папку install, в папке install создаем файл install_ended.txt - если при запуске index.php в корне сайта он проверит и

обнаружит в папке install данный файл - то нужно выдать в браузер предупреждение о необходимости полного удаления папки install

с сайта. Пока папка не будет удалена - не давать доступ к сайту не продолжая выполнение кода в index.php а выводить

только сообщение с предупреждением !!!

*/

error_reporting(E_ERROR);

//1) проверяем была ли нажата кнопка start_install

$start_install_action = isset($_POST['start_install']);

//запоминаем введенные данные доступа к базе данных и сайту (если они были введены)

$dbhost = $_POST['database_server'];

if ( !isset($dbhost) || $dbhost == "" )

$dbhost = '127.0.0.1';

$dbuser = $_POST['database_user'];

if ( !isset($dbuser) || $dbuser == "" )

$dbuser = 'root';

$dbpassw = $_POST['database_pass'];

if ( !isset($dbpassw) /*|| $dbpassw == ""*/ )

$dbpassw = '';

$dbsite = $_POST['database_name'];

if ( !isset($dbsite) || $dbsite == "" )

$dbsite = 'my_database';

$site_url = $_POST['site_url'];

if ( !isset($site_url) || $site_url == "" )

$site_url = 'http://localhost/megainformatic_cms_express';

if ( $start_install_action )

{

//2) да! , пробуем получить доступ к базе данных с указанными параметрами

$result = TRUE;

$rc = mysql_connect($dbhost, $dbuser, $dbpassw);

if ( !$rc )

{

$result = FALSE;

}

$s = mysql_select_db($dbsite);

if ( !$s )

{

$result = FALSE;

}

if ( !$result )

{

//3) если доступа нет - выводим предупреждение

echo '<br><span style="color: #ff0000;">Ошибка !!! Невозможно получить доступ к базе данных !!! Пожалуйста еще раз проверьте

правильность введенных данных и нажмите кнопку НАЧАТЬ УСТАНОВКУ еще раз</span><br><br><br>';

}

else {

mysql_close($rc);

//include_once "includes/constants.php";

//4) если доступ есть - в базе данных сайта создаем все необходимые таблицы и заносим в них информацию

$result = deploy_database_data();

//5) создаем в корне сайта файл settings.php и заносим в него всю необходимую информацию

$result = $result && create_config();

//6) в папке install создаем файл install_ended.txt - он служит флагом успешного окончания установки

//!!! предупреждает ситуацию повторной установки уже установленного сайта !!!

$result = $result && create_install_end_flag_file();

echo 'установка успешно завершена !!! <br><br>Теперь сайт будет работать в штатном режиме и Вы можете обратиться к нему по адресу - '.'<a href="'.$site_url.'">'.$site_url.'</a><br><br>

<br><span style="color: #ff0000;">ВНИМАНИЕ !!! УСТАНОВКА САЙТА ПОЛНОСТЬЮ ЗАВЕРШЕНА И ВАМ НЕОБХОДИМО УДАЛИТЬ ПАПКУ install с вашего сайта. Пока Вы это не сделаете дальнейшая работа невозможна. После удаления папки install просто обратитесь по адресу сайта и сайт заработает.</span>';

}

}

//else

//0) НАЧАЛО УСТАНОВКИ

//выводим начальную страницу установщика

if ( !$result )

{

echo '<img src="install/images/installer.png" border="0" alt="установка '.$install_system_name.'" title="установка '.$install_system_name.'" width="320" height="240">

<br><br>

Добро пожаловать в установщик системы <strong>'.$install_system_name.'</strong><br><br>

<div id="desc">

1) Создайте <span class="blue_text">новую базу данных</span><br><br>

Если Вы выполняете установку на DENVER то,<br><br> в отдельном окне (вкладке) браузера обратитесь по адресу <span class="blue_text">http://localhost/Tools/phpmyadmin/index.php</span><br><br>

или кликните

эту ссылку - <a href="http://localhost/Tools/phpmyadmin/index.php" target="_blank">http://localhost/Tools/phpmyadmin/index.php</a><br><br><br>

<span class="orange_bold_text">!!! ОБРАТИТЕ ВНИМАНИЕ DENVER ДОЛЖЕН БЫТЬ ЗАПУЩЕН !!!<br><br></span>

Если Вы выполняете установку сайта на хостинг, то используйте панель управления Вашим хостингом, для создания новой базы данных сайта. При этом выполнение шага 1.1 будет отличаться, т. к. это действие Вы будете выполнять через панель управления Вашим хостингом. За более подробной информацией обращайтесь к вашему хостинг-провайдеру.<br><br>

1.1) В открывшейся странице phpMyAdmin введите имя для новой базы данных, например, <span class="blue_text">my_database</span> и укажите кодировку для новой базы данных <span class="blue_text">cp1251_general_ci</span> как показано на рисунке<br><br> <img src="install/images/create_new_database.jpg" border="0" alt="создание новой базы данных" title="создание новой базы данных" width="512" height="353"><br><br>

после этого нажмите кнопку <span class="blue_text">Create</span><br><br>

2) в поля указанные ниже, введите необходимую для доступа к созданной базе данных информацию, а затем нажмите кнопку НАЧАТЬ УСТАНОВКУ<br><br>

<div id="db_connect_form"><br><br><strong>Доступ к новой базе данных сайта</strong><br><br>

<form name="site_installer" id="site_installer" action="index.php" method="post">

<strong>Адрес сервера:</strong><br> <input type="text" name="database_server" value="'.$dbhost.'" >(обычно <span class="blue_text">localhost</span> или <span class="blue_text">127.0.0.1</span>)<br><br>

<strong>Имя базы данных:</strong><br> <input type="text" name="database_name" value="'.$dbsite.'" >(введите обязательно такое же имя, которое использовали при создании новой базы данных)<br><br>

<strong>Имя пользователя:</strong><br><input type="text" name="database_user" value="'.$dbuser.'" > (для локальной базы данных на DENVER можно использовать <span class="blue_text">root</span>)<br><br>

<strong>Пароль:</strong><br><input type="text" name="database_pass" value="'.$dbpassw.'" > (для локальной базы данных на DENVER можно не вводить)<br><br>

<strong>Доступ к сайту</strong><br><br>

<strong>Адрес сайта:</strong><br><input type="text" name="site_url" size="60" value="'.$site_url.'" > (укажите адес сайта - для локального сайта на DENVER установленного в папку <strong>megainformatic_cms_express</strong> можно использовать адрес <span class="blue_text">http://localhost/megainformatic_cms_express</span>)<br><br>

<input class="start_install_btn" type="submit" name="start_install" value="Начать установку"><br><br> </form>

</div><!-- end of #db_connect_form -->

В процессе установки созданная база данных будет заполнена необходимыми данными, а также в файл <strong>settings.php</strong> будут занесены

правильные настройки для работы вашего сайта.<br><br>

</div><!-- end of #desc -->';

}

?>

</div><?php /* end of #container */ ?>

</div><?php /* end of #main */ ?>

</body>

</html>

Приведенный код описывает выполнение всех указанных 4 шагов.

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

Оба эти изображения можно разместить в папке install/images/

Приведенный код, чтобы лучше его понять Вы можете вставить в собственный файл install.php и протестировать как он работает.

Второй важный момент, который надо учитывать - это код, который нужно вставить в файл index.php вашей cms.

Поскольку любой сайт начинает свою работу именно с файла index.php размещенного в корне сайта, то активировать процесс установки сайта достаточно просто.

В самом начале файла index.php мы разместим такой код -

//выполняем установку сайта

//была ли успешно завершена установка ?

$istall_ended_filename = 'install/install_ended.txt';

if ( file_exists($istall_ended_filename ) )

{

//ДА! Поэтому нужно полностью удалить папку install

echo '
<span style="color: #ff0000;">ВНИМАНИЕ !!! УСТАНОВКА САЙТА ПОЛНОСТЬЮ ЗАВЕРШЕНА И ВАМ НЕОБХОДИМО УДАЛИТЬ ПАПКУ install с вашего сайта. Пока<br><br> Вы это не сделаете дальнейшая работа невозможна. После удаления папки install просто обратитесь по адресу сайта и сайт заработает.</span>';

exit();

}

else {

//НЕТ! Тогда выполняем процедуру установки сайта

$installer = 'install/install.php';

if ( file_exists($installer ) )

{

require_once $installer;

}

}

//конец установки

По сути это всё.

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

При этом код, который мы внедрили в index.php будет проверять наличие файла-флага успешной установки.

Если такого файла в папке install еще нет - будет проверяться наличие папки install и файла install.php в ней.

Если такая папка и файл есть - управление будет передаваться ему и будет открыта страница ИНСТАЛЛЯТОРА в браузере.

Соответственно пользователь выполнит все необходимые действия следуя инстукциям, после чего install.php успешно выполнит свою задачу.

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

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

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

Спасибо за внимание !

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

Вы также можете заказать систему megainformatic cms express или её производные и увидеть воочию каким образом развертывается сайт при помощи инсталлятора, ну и разумеется получить работающий сайт под ключ.

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,1355