Модульное программирование на PHP или как написать маленький портал. Модульное программирование на PHP или как написать маленький портал Безбоязненный portal php mod

Heya guys! Long time no see right? Well I"ve been busy for the , but let"s get this out of the way.

With Greenlight nearly coming to an end, let"s remind ourselves at how the great things it did for us. The only way people had to play mods was to go to some download page and install it manually on steam (great system btw, had it"s own folder on the steamapps). While that might sound easy for the most part, there where people who just didn"t knew you could actually install mods on steam, not to mention the steam pipe update which just broke everything.

And then came greenlight. Altough it was yes a door for many horrible games, controversies and the monthly steam drama fest, it did actually a lot of good. Many indie developers finally had a chance of putting their game onto what is the marketplace for any PC gamer. And mods benefited from that. People that didn"t even knew that mods existed, didn"t know how to install them or just didn"t knew how to fix a broken mod finally had a chance to play more of their favorite games. The influx of people mods got after this was HUGE, many youtubers making let"s plays of mods and a easy way to finally play them. There was even the case of PS: Mel that won a award at the Games Awards 2015.

A lot of mods benefited from it too. Without requiring the base game installed, people didn"t have to worry about any errors since valve helped make the mod being considered an actual game (for steam), allowing things such as workshop implementation and achievements.

So, with the end of greenlight, what this means for us?

Steam Direct is the all new system, which will let you put any game on steam for $100 and Valve"s approval. The $100 fee is nothing after all the work you and your team could have put on your mod, and the fee can be split up anyway. But it isn"t about the fee, the new system will actually mean a better gateway for new games and mods.

With a ton of great mods coming up however, you guys will have to find a new source for new mods. This collection won"t be updated anymore since mods won"t be getting on greenlight anymore. I do have a few websites you guys can check though

As far as I can remember the longest running Portal 1 & 2 community. Not only they have the most talented people, they also have all the people from the community. Not to mention the HUGE database of maps for both games on the series, the best source to download single maps all around. And have a great time too! They"re great people.

http://www.moddb.com/ - not only for the portal fan, moddb for me was the way to go for any mod of valve games. They don"t have any curation, but you can freely explore all the mods in a large list, and with a few filters you already have a huge download list to make use of. Moddb also has a few mods that people didn"t even hear about, which I loved to discover and play them by myself. Did you know portal has a chinese mod that let"s you use a phone? It"s great btw.

Well guys I guess that it. I"ll be seeing ya all around, but don"t think this means anything to the portal community. In fact, this won"t change pretty much anything! People will keep making mods and you guys will keep enjoying them. Just through a better method! See ya around,

EDIT: In case you wanna talk with the people of the thinking with portals forum, also check their discord.



Я попытаюсь тут разъяснить то, как я подхожу к написанию сайтов, где могут применять подключаемые модули. Пример тому известный скрипт PHPNuke. Как бы не ругали его, подход, примененный в нем, к модульному программированию очень удобен. Но из-за корявости общего кода применять такой скрипт на серьезных сайтах, точнее скажем порталах, с большим количеством посетителей, не рекомендуется. Почему? Скрипт работает медленно, очень большая нагрузка на базу данных. Можно еще очень много чего описать, но это уже материал для другой статьи. Если кому интересно, то в интернете полно описаний этого движка. В «неудобоваримости» PHPNuke я убедился сам. Мой основной проект NVIDIA BIOS Collection в начала базировался на PHPNuke, но постоянные проблемы с хостингом заставили меня начать разработку своей система портала с нуля. Из PHPNuke я взять только суть модулей, все остальное же делал сам. И так для начала. Прежде всего, надо продумать систему каталогов, что и где будет лежать. Вот примерный вариант.

/
/mods/ - каталог для хранения модулей
/img/ - картинки
/include/ - каталог вспомогательных файлов
это что нам сейчас пока надо. Применять блоки и скины мы пока не будем. В моем портале также были другие каталоги
/blocks/ - Тоже своего рода модули, но не выводящие сами информацию, а возвращающие заполненную переменную.
/js/ - каталог для Java скриптов
/theme/ - каталог выбора тем или, грубо говоря, набор скинов для сайта.
/files/ - файлы для скачивания
ну и другие каталоги.

В корневом каталоге храниться всего один файл index.php и вся работа идет через него. Теперь надо решить как будет выглядеть сам сайт. Для нашего примера подойдет наипростейший вариант дизайна, верх сайта, низ сайта, а в середине наша информация из модулей. Для этого в каталоге include создадим два файла top.php и bottom.php, что соответственно будет верхней частью дизайна и нижней частью дизайна.

top.php $PAGE_TITLE width="100%" id="AutoNumber1">

здесь выводится шапка

Меню сайта

- Модуль1
- Модуль2

"; ?>

Предвижу комментарии, где скажут, почему я не вывожу HTML код отдельно, а php отдельно. Я приучил себя к написанию 100% PHP кода, с одной стороны не очень и красиво может выглядеть, но мне так удобнее. Если кто-то хочет писать по-другому, то тут я не советчик. Заметьте переменную $PAGE_TITLE в top.php. В моей реализации вся информация о модулях храниться в базе данных, где помимо имени файла модуля храниться также и его название, которое потом и кладется в $PAGE_TITLE, для вывода его в головок браузера.

bottom.php
"; ?> Также создадим файл конфигурации config.php и положим его в каталог include. config.php Вот примерная схема работы index.php Теперь создадим два файла mod1.php и mod2.php и положим их в каталог mods. mod1.php "; echo "А здесь можно посмотреть на модуль номер 2"; ?> mod2.php "; echo "А здесь можно посмотреть на модуль номер 1"; ?>

Поясню немного вот эту строку

If (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); } В каждый модуль желательно включать такую проверку во избежании вызова файла модуля вне самого index.php. На примере моего портала до вызова модуля у меня идет подключение в базе данных, считывание некоторых глобальных переменных и без них, ни один модуль сам по себе работать не сможет. Так что лучше всего просто запретить вызов модуля напрямую. Вызов модулей в данном случае производится через строку в виде index.php?mod=имя модуля, но тут можно применить и систему ЧПУ. Тогда URL примет вид index.php/имя модуля/

Вот в принципе очень грубая схема реализации модулей. Можно добавить любой модуль, просто положив его в каталог mods/ и придерживаясь общей концепции работы, построить очень сложный сайт. В чем удобства работы? По сути вы отодвигаете от себя основную заботу по натягиванию кода на дизайн. Это делает один раз в index.php. Сам же модуль должен только работать и приносить пользу. Централизация сбора основной информации из базы или конфигурационного файла, глобальные переменные сайта, информация о пользователе и т.д. С другой стороны есть недостатки (хотя при определенном взгляде они не кажутся недостатками), скажем надо четко следить за тем какие имена переменных используются до модуля, чтобы не перезаписать, случайно, их внутри модуля. Один раз у меня такое случилось. После такого случая, я взял для себя за правило называть системные переменные в таком виде $sys_имя переменной. Другой очевидный недостаток это трудность реализации разных вариантов дизайна для разных модулей. Но! Тут есть выход тоже.

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

К примеру, наши простые модули можно модифицировать в таком варианте.

"; echo "А здесь можно посмотреть на модуль номер 2"; include("inc/bottom.php"); ?>

Как делать в данном и конкретном случае решать Вам. Я же просто попытался направить тех, кто начинает писать на php, а может и тех, кто уже пишет, на определенный вариант или стиль программирования.
//www.x-bios.3dgames.ru - Сайт моего портала, но к сожалению он закрыт
//fallenangels.combats.ru - Сайт игрового клана, также полностью построен на модульной системе.

Фишки мода:
- "Свободная Игра/Фриплей"
После первого завершения игры вы появляетесь у ЧАЭС и можете попробовать любую другую концовку игры. Если вы дойдете до О-Сознания и откажетесь присоединяться, то вас упакуют в грузовик мертвых и отправят на ранние локации. После этого появится возможность вступить во все фракции, вступить в них можно поговорив с Сидоровичем на Кородоне.

Заметка: Когда вы попадете на ЧАЭС после прохождения выброса не будет, поэтому можно спокойно исследовать территорию ЧАЭС, но там не будет людей, только монстры. (Нужно начать новую игру или загрузить сохраненную игру перед Припятью)

ПС: Каждый раз как вы будете просыпаться, вы будете видеть новый сон, случайно выбранный.

Заметка: Если хотите увидеть Стадион, идите к главному входу и поверните на лево или направо, где сможете перелезть через ограждение.
- "Выбросы".

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

ПС: Я добавил просмотр, когда вы начинаете новую игру и через 5 минут начинается выброс, которым вы можете насладиться в полной мере
- "Вступить в любую группировку" (Монолит, Военные, Свобода, Долг, Бандиты, Экологи, Наемники и Свобода)

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

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

К примеру, если вы вступите в Монолит, то получите кромешный ад в большинстве уровней, но на радаре и ЧАЭС получите помощь от Монолита, тоже касается и Военных, но на последнем уровне Военных не будет, только монолитовцы.

Чтобы вступить в фракцию нужно иметь достаточно количество денег (10-50к)
- "Восстановление отношения с фракцией" и Выход их фракции
Если у вас возникают подобные проблемы идите к Сидоровичу.

Заметка: Только для Одиночек, Долго и Свободы, для других фаркций вы всегда враг, это можно исправить вступлением в другие фрацкии, - "Настройки мода" - я оставил возможность игроку настроить мод по своему усмотрению, все инструкции находятся в файле db.script.

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

Это не просто спаун новых мутантов, это и особый специальный эффект, зависящий от уровня. Некоторые монстры могу появиться совсем рядом с вами, об этом вы узнаете, усшылав леденящие душу их вопли.
- Активация артифактов, с уникальными текстурами и звуками.
- Артифакт починки (Зарядки)

Соответствует своему названию, чинит оружие (87%) и броню (90%), спасибо "Frag Maniac (AKA >Omen< " за идею. Я не стал делать 100% починку, так как это сделало бы бессмысленным починку у торговцев.

Телевидение Зоны - ящик теперь показывает забавные картинки, смотрите на скриншотах.

ПС: Там есть и множество других клевых картинок, но пусть это будет для вас сюрпризом)

Брать деньги у НПС, так вы можете покупать больше оружия, если начнете новую игру. Я думаю это честно, так как увелично количество монстров и а-лайф более жесткий!

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

Более жестокий а-лайф (может быть не совместим с другими модами, меняющими алайф, так как это и есть модификатор а-лайфа), первая версия а-лайфа уже была довольно жестока и вы можете выполнять ВСЕ квесты.

Больое исправление: исправлен спаун мутантов, НПС могут атаковать их.

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

- "Новые НПС" (смотрите скрины) и лучшее вооружение с начала, теперь они могут сражаться с мутантами, а не только быть мясом (нужно начинать новую игру).

Пси-пес в Припяти и других уровнях.

- "Чорный бОлт" - Болт-Артефакт, смертельное оружие на короткой дистанции, но вам понадобиться хорошая защита от его радиации.

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

Заметка: Анимация немного не проработана, но работает, я пытался сделать мини-ножи, но у меня не хватило времени. (Если кто-нибудь хочет сделать анимацию мини-ножей вместо болтов, напишите мне на мыло).

Мод Сна, теперь вам не надо бояться умереть во время сна от голода.

Все брони подправлены и Экзо-брони позволяют нести дополнительный вес и позволяют бегать. Существует порядка 40 Экзо-броней переделанных для приборов ночного видения и поднятия дополнительного веса.

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

Переделана система погоды, теперь она более ясная в Припяти и ЧАЭС, также увеличена случайность погоды, молнии во время грозы бывают очень часто.

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

Добавлен торговец в Припяти.

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

Больше физических объктов.

3 вида ножа - вы появляетесь со старым ножом, у торговцев можно купить два новые.

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

Вы можете купить улучшенные детекторы у торговца.
- Вы начинаете новую игру с улучшенным оружием, пистолет Вальтер, множеством патронов, научной аптечкой, антирадом, 2 гранатами и ножом.
- Добавлено больше нового оружия, 2 автоматических пистолета: Вальтер и Беретта. Более уникальные модификации старых оружий: Супер Гаусс, Пистолет Гаусса, Zone ТР301 (модификация ЛР300 - другие текстуры и особенности), два автомата MP5 (Золотой и MP5 модифицированный)
- Кровопускание подправлено
- Добавлена гармошка всем Сталкерам, я бы добавил еще, но не могу найти музыку для них.
- Отношения группировок подправлены
- остальные незначительные правки багов и баланса
- Все остальные фичи из первой части моего мода.
Перевод by belkien
Осуждение мода

3.6K

Я попытаюсь тут разъяснить то, как я подхожу к написанию сайтов, где могут применять подключаемые модули. Пример тому известный скрипт PHPNuke. Как бы не ругали его, подход, примененный в нем, к модульному программированию очень удобен. Но из-за корявости общего кода применять такой скрипт на серьезных сайтах, точнее скажем порталах, с большим количеством посетителей, не рекомендуется. Почему? Скрипт работает медленно, очень большая нагрузка на базу данных. Можно еще очень много чего описать, но это уже материал для другой статьи. Если кому интересно, то в интернете полно описаний этого движка. В <неудобоваримости> PHPNuke я убедился сам. Мой основной проект NVIDIA BIOS Collection в начала базировался на PHPNuke, но постоянные проблемы с хостингом заставили меня начать разработку своей система портала с нуля. Из PHPNuke я взять только суть модулей, все остальное же делал сам. И так для начала. Прежде всего, надо продумать систему каталогов, что и где будет лежать. Вот примерный вариант.

* /mods/ — каталог для хранения модулей
* /img/ — картинки
* /include/ — каталог вспомогательных файлов

Это что нам сейчас пока надо. Применять блоки и скины мы пока не будем. В моем портале также были другие каталоги

* /blocks/ — Тоже своего рода модули, но не выводящие сами информацию, а возвращающие заполненную переменную.
* /js/ — каталог для Java скриптов
* /theme/ — каталог выбора тем или, грубо говоря, набор скинов для сайта.
* /files/ — файлы для скачивания

ну и другие каталоги.

В корневом каталоге храниться всего один файл index.php и вся работа идет через него. Теперь надо решить как будет выглядеть сам сайт. Для нашего примера подойдет наипростейший вариант дизайна, верх сайта, низ сайта, а в середине наша информация из модулей. Для этого в каталоге include создадим два файла top.php и bottom.php, что соответственно будет верхней частью дизайна и нижней частью дизайна.

$PAGE_TITLE

здесь выводится шапка

Меню сайта

- Модуль1
- Модуль2

"; ?>

Предвижу комментарии, где скажут, почему я не вывожу HTML код отдельно, а php отдельно. Я приучил себя к написанию 100% PHP кода, с одной стороны не очень и красиво может выглядеть, но мне так удобнее. Если кто-то хочет писать по-другому, то тут я не советчик. Заметьте переменную $PAGE_TITLE в top.php. В моей реализации вся информация о модулях храниться в базе данных, где помимо имени файла модуля храниться также и его название, которое потом и кладется в $PAGE_TITLE, для вывода его в головок браузера.

"; ?>

Также создадим файл конфигурации config.php и положим его в каталог include.

Вот примерная схема работы index.php

Теперь создадим два файла mod1.php и mod2.php и положим их в каталог mods.

"; echo "А здесь можно посмотреть на модуль номер 2"; ?> mod2.php "; echo "А здесь можно посмотреть на модуль номер 1"; ?>

Поясню немного вот эту строку

if (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); }

В каждый модуль желательно включать такую проверку во избежании вызова файла модуля вне самого index.php. На примере моего портала до вызова модуля у меня идет подключение в базе данных, считывание некоторых глобальных переменных и без них, ни один модуль сам по себе работать не сможет. Так что лучше всего просто запретить вызов модуля напрямую. Вызов модулей в данном случае производится через строку в виде index.php?mod=имя модуля, но тут можно применить и систему ЧПУ. Тогда URL примет вид index.php/имя модуля/

Вот в принципе очень грубая схема реализации модулей. Можно добавить любой модуль, просто положив его в каталог mods/ и придерживаясь общей концепции работы, построить очень сложный сайт. В чем удобства работы? По сути вы отодвигаете от себя основную заботу по натягиванию кода на дизайн. Это делает один раз в index.php. Сам же модуль должен только работать и приносить пользу. Централизация сбора основной информации из базы или конфигурационного файла, глобальные переменные сайта, информация о пользователе и т.д. С другой стороны есть недостатки (хотя при определенном взгляде они не кажутся недостатками), скажем надо четко следить за тем какие имена переменных используются до модуля, чтобы не перезаписать, случайно, их внутри модуля. Один раз у меня такое случилось. После такого случая, я взял для себя за правило называть системные переменные в таком виде $sys_имя переменной. Другой очевидный недостаток это трудность реализации разных вариантов дизайна для разных модулей. Но! Тут есть выход тоже.