Перейти к контенту
  • 0

IPB 3.0.0 - Вышел новый движок. Разбор структуры ядра.


Вопрос

Странно, недавно вышел новый релиз IPB 3.0.0 (с открытым кодом без IC) - а ни форума, ни отдельной ветки по предварительному обсуждению нового творения от IPB нет.

*Если тема не уместна здесь - просьба модераторов пристроить ее в нужном по их мнению разделе.

 

Признаться честно - весьма долго и не без интереса ждал новый релиз эры IPB 3.0 - в том смысле, что томил интерес - куда будет двигаться IPB дальше и что будет за ядро движка, ибо у конкурентов в лице VB уже давно тянется релиз серии (3.)

Очень было интересно - чем же ответит МЭТТ.

 

 

Поверхностные впечатления:

 

Вчера установил себе IPB 3.0 и долго изучал структуру нового движка.

Если честно, то не ожидал от IPB того, что я увижу, ибо та же эволюция движка 1.3 --> 2.0 --> 2.1 --> 2.2 --> 2.3 хоть и имела кардинальные и отличительные перемены в структуре, начиная от полностью переписанных и видоизмененных функций, классических классов (class_session, class_display), задействования кеширования, последовательности подключения модулей, работы c TEMPLATES, а так же преобразование а супер класс $ipsclass-> -- все это имело некую зримую последовательность формирования и развития структуры.

Например можно было наглядно открыть движок 2.0 и 2.3 и несложным образом проследить изменения в видоизменениях структуры (например для правки модуля под новые версии IPB)

 

В IPB 3.0 можно смело забыть про то, что было раньше.

СТРУКТУРНОЕ ЯДРО ПЕРЕПИСАНО ПОЛНОСТЬЮ.

 

Когда я открыл index.php - задался вопросом... а IPB ли это?

 

define( 'IPB_THIS_SCRIPT', 'public' );
require_once( './initdata.php' );

require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

ipsController::run();

exit();

 

Это для примера полный код файла index.php

 

 

Копая структуру движка дальше и пытаясь уловить последовательность работы новой логики в структуре ядра - удивление лишь возрастало. Хотя некоторые отголоски от 2.3 и остались, начиная от некоторых построений функций, логики в классах, SQL запросов, но это лишь ОТГОЛОСКИ...

Множество новых функций, модулей и современных возможностей от PHP 5.0

Полностью переписанная админ панель и принцип распределения permissions + многое другое.

 

Скажу одно - IBP 3.0 это абсолютно новый и ничем не похожий на предыдущие релизы продукт.

 

Время безусловно расставит все на свои места и покажет УЛУЧШИЛО ли данное решение в моделировании нового ядра IPB 3.0 или наоборот все УСЛОЖНИЛО.

Да, новый движок несет в себе не мало новых функций, внешне красив и привлекателен + имеет более расширенный функционал - но БУДЕТ ЛИ ОН ТАК ЖЕ ПРАКТИЧЕН как предыдущие релизы... будет ли он УДОБЕН И ГИБОК для МОДЕЛИРОВАНИЯ и трансформаций. В этом аспекте я пока не берусь судить, ибо надо более глубже изучать структуру.

 

Я отношусь к тем людям, которые не обращают внимание на ВНЕШНИЕ ФИШКИ - для меня они вторичны.

Для меня больше важна гибкость внутренней структуры... просто иногда когда заглядываешь в структуру кода ВНЕШНЕ КРАСИВОГО ДВИЖКА - ХОЧЕТСЯ ПЛАКАТЬ (Битрикс тому подтверждение).

Посему про IPB 3.0 мне пока сложно объективно судить.

 

Читая первые отзывы на официальном сайте - я нашел не мало не лестных отзывов и не довольных людей новой структурой движка. Многие отмечают запутанность и громоздкость новой структуры, но это лишь поверхностное восприятие, которое в основном будет касаться сложностей для разработчиков модулей/хаков для нового IPB 3.0, а не обычных пользователей.

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

 

Поживем - увидим.

 

 

P.S.: Просьба тех, кто уже имел возможность узреть новую структуру кода IPB 3.0 - поделиться своими впечатлениями, размышлениями и соображениями...

Что на первый взгляд понравилось, что нет. (не внешне, а ВНУТРЕННЕ)

Особенно интересно мнение людей, которые написали не один модуль/хак для IPB.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Вчера весь вечер изучали..

 

Что тут скажешь. Всё самое главное, что обещали - всё выполнили. Особенно понравились бб-коды.. Перечислять можно долго. Одно скажу - на первый взгляд миссия действительно выполнена, и модификации перестанут касаться ядра. Это теперь движок "для разработчиков" и "для ленивых админов". :D

 

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

 

+++

 

Вопросы по делу:

1. Возможно ли получить author_id поста в плагине бб-кода (/sources/classes/bbcode/custom/) без вмешательства в ядро?

2. Касательно хуков типа action overload. Что-то я не очень понимаю, что будет, если два разных хука будут перегружать один и тот же класс. Обработку template'ов уже нашёл - с ними всё понятно.. А вот с этим как-то мимо пока. Плюс нет примеров таких хуков..

 

К вечеру сам разберусь, но вдруг кто-то что-то умное раньше напишет.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

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

parent::foo();

- и выполняется все остальное. :D В коде полно такого.

 

Старое мышление можно выкидывать на помойку.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Затестил - всё работает как часы.

 

Когда несколько хуков делают extend на один класс, то они на самом деле exnted'ят друг друга по порядку вызова.

class hook1 extends public_forums_forums_topics
class hook2 extends hook1
class hook3 extends hook2

 

При изменении порядка файлы редактируются сами.

 

Правда, теперь я не очень понимаю, почему при таком раскладе у меня вызывается только функция из класса hook1 + функция её родителя. А hook2 и hook3 как будто игнорируются. Но это уже я нуб в ООП, наверное.

 

В хуках одна функция такого плана:

	public function parsePostRow( $row = array() )
{
	echo 'hook1';
	return parent::parsePostRow($row);
}

 

Соответственно, строка в echo соответствует имени класса.

 

+++

 

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

 

+++

 

Единственное еще, они бы в hooks сделали подпапки.. А то на каждое действие там будет отдельный файл. Десять модов поставил - сто файлов в единой свалке получил. Хотя может есть такая возможность.. если указать имя файла как 'dir/name.php'. Проверим..

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Тоже изучаю ХУКИ.

Удобная штука, но вот производительность неизбежно будет принесена в жертву таким вещам...

 

3.0 ушел далеко в "автоматизированность" в духе нажал на кнопу- получил результат, но из-за этого на порядок выросла "громоздкость кода" и время исполнения скриптов.

 

Работа над ядром проделана огромная и все так не привычно и мудрено - особенно связки классов...

Не мало времени потребуется для вникания что и к чему относится...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Очередной затуп..

 

В новом classPost есть вызовы таких функций, как $this->getPostContent(), $this->getPostContentPreFormatted().

 

Интересно то, что строки 'getPostContent' и 'getPostContentPreFormatted' встречаются только в двух профильных классах, при этом там одни только вызовы. Объявления этих функций в коде нет вообще, если верить поиску по файлам.

 

Эээ.. втф? Хочу туда хук повесить.)

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Очередной затуп..

 

В новом classPost есть вызовы таких функций, как $this->getPostContent(), $this->getPostContentPreFormatted().

 

Интересно то, что строки 'getPostContent' и 'getPostContentPreFormatted' встречаются только в двух профильных классах, при этом там одни только вызовы. Объявления этих функций в коде нет вообще, если верить поиску по файлам.

 

Эээ.. втф? Хочу туда хук повесить.)

 

 

Ты имеешь ввиду это?

 

		if ( ! $this->getPostContent() AND ! $this->getPostContentPreFormatted() )
	{
		throw new Exception( 'NO_CONTENT' );
	}

 

Загвоздка в том, что данных функций в структуре вообще нет.

Либо это наработки к последующему релизу в RC2, либо *забытые и не убранные косяки* за время тестинга и чистки релиза RC1

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Загвоздка в том, что эти функции работают и возвращают содержимое поста. При этом они в явном виде не объявлены нигде.)

 

Более того, таких функций тьма-тьмущая.

$this->getForumID()

$this->getAuthor()

$this->getForumData('status')

 

фактически, все, имя которых начинается с get.

 

+++

 

Нет, я понимаю, что они где-то неявно объявляются. Вопрос только в том, где именно.)

 

+++

 

Кстати, ещё что касается наработок к следующему релизу. Там в коде есть классы для работы с тегами! И теги явно задуманы глобальные, а не только по топикам. Скорее всего даже сквозные будут по всем их application'ам и компонентам.

 

+++

 

Я с этой фишки с parrent тащусь всё больше и больше.

 

Например, берём великую&ужасную функцию parsePostRow. И перегружаем её к лешему таким образом:

function parsePostRow( $row=array() )
{
//тут код обработки перед стандартным парсингом
parent::parsePostRow( $row )
//тут код обработки после парсинга
}

 

Любые действия влёгкую добавляются перед\после вызова любой функции. Можно сразу перед и после. Можно вообще стандартную функцию заменить к лешему и написать свою. И всё остальное, что от этого класса зависит, везде сразу будет эффект.

 

Правда, косяки в модах теперь будут иметь просто катастрофические последствия.) Будешь потом сидеть и раскручивать всю цепочку наследования. А если 40 здоровых хуков висит на одном классе, каждый из которых по 10 функций?

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Эммм.. Хуком нельзя трогать classPost (classPostForms)?

 

Как-то так оно прописано.

		//-----------------------------------------
	// Grab the post class
	//-----------------------------------------

	require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );
	require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPostForms.php' );

	$this->_postClass = new classPostForms( $registry );

 

И дальше танцуют вокруг $this->_postClass.

 

Я так понимаю, они намекают на перегрузку функций в public_forums_post_post. Но как тогда добавить обработку своих переменных в таблицу posts? Или как мне встрять посередине процесса обработки?

 

Ведь после вызова вот таких конструкций:

if ( $this->_postClass->addReply() === FALSE )
if ( $this->_postClass->addTopic() === FALSE )

- мы получаем из голых данных сразу готовый пост, который давно лежит в БД, и кеши все давно пересчитаны.

 

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

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Разминки ради наколдовал первый мод: "Кто был сегодня" для 3.0 (скрин).

 

Столкнулся с очень интересным моментом -> можно создать хук, но нельзя его потом отредактировать. Только вкл\выкл. Более того, хук нельзя экспортировать, либо я не нашёл. Хотя поле для импорта хуков из XML присутствует.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

После вчерашнего изучения нового движка могу сказать, что несмотря на увеличение функционала - новое ядро потеряло гибкость. Сей факт опечалил. Если из 1.3-2.3 можно было лепить все что угодно, то с 3.0 надо не напильником обрабатывать, тут нужен рашпиль и рубанок... очень много не нужного кода и по сути усложняющего работу всей структуры... с классами вообще путаница.

Я наоборот свой 2.3 отшлифовал до минимума, убрав около 15% не нужного по умолчанию кода, функций и сократив до минимума SQL запросы, используя модифицированнное кеширование многих запросов через EA.

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Потестил и я..

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

Еще понравился приват. Об таком привате тоже давно мечтал.

Вот только я не понял юмора с плюсами и минусами. Эт чего, можно самому себе плюсики и минусы ставить? )))

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Поищите по документации. __call - это "волшебная" функция, которая вызывается при попытке обращения к несуществующему члену класса. А лучше - посморите сам живой код этого метода. Он самым первым идет. Всё поймёте.

 

+++

 

http://vvv-guild.ru/wr/Online_today%20v1.xml - попробуйте поставить хук.)

 

Я нашёл, как экспортировать готовые моды. В двух словах - это о***нно! В один XML-файл добавляютя любые темплейты, настройки, ланг-строки, таски, alter'ы для базы данных. Для тех, кому и этого мало, есть возможность вообще добавить свой php-скрипт, который выполнится при установке. Скорее всего, даже самые огромные и фундаментальные моды будут помещаться в один файл, который нужно просто импортировать и сразу можно пользоваться. Plug & Pray Play!

 

Вообщем, это даже превышает мои ожидания. Well done, IPS!

 

+++

 

Вот только я не понял юмора с плюсами и минусами. Эт чего, можно самому себе плюсики и минусы ставить? )))

В настройках всё есть.

 

+++

 

Добавлено: перезалил хук.

Параллельно нашёл баг -> если template не принадлежит базовому стилю (id=0 у него теперь), то в экспорт уходит пустая строка.

 

+++

 

И еще одно. Обратите внимание, что lang-и теперь хранятся в БД. А на основании БД генерятся кеши в /cache/lang_cache.

Если будете заниматься локализацией - не вздумайте файлы переводить.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

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

 

Насколько я понимаю, для этого служит Skin overload. Но.. эмм.. как тогда быть с совместимостью модов? Или с шаблонами, отличными от стандартных?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Если кто-то это еще читает.. лол.

 

У нас с коллегкой возник следующий вопрос: а зачем, собственно, в функцию doExecute везде передаётся объект registry? Самое главное, он затем никак не используется. Вместо него пишут $this->registry. И это всё учитывая тот факт, что registry является синглтоном, и двух экземпляров класса быть не может.

 

Я так думаю, они таким образом проверяют, чтобы registry был железно инициализирован на момент вызова. Но всё равно как-то странно.

 

P.S. Да, я еще пока нуб в ООП. ^__^

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

по поводу get-ов. Это называется magic call. Суть в том, что обращение к свойствам модели происходит через вызов такого вот "магического" метода, который через __call возвращает нужное свойство. В ООП вообще обращение напрямую к свойствам редко когда рекомендуется, а такие магические вызовы позволяют избежать описания руками set/get на каждое свойство при этом оставляют возможность переопределить руками такие методы в модели (например, если требуется что-то сделать с данными в свойстве)

 

Хуки, как я понял, сделаны через наследование? ИМХО, но неудачная идея ... как минимум из-за того, что "При изменении порядка файлы редактируются сами.". Т.е. получается куча проблем с инсталляцией разных модов использующих один и тот же хук.

Изменено пользователем MiksIr
Ссылка на комментарий
Поделиться на других сайтах

  • 0

В теории - если моды написаны корректно, проблем быть не должно.

 

Там изменяется объявление класса

class X extends Y

- вот Y изменяется, чтобы хуки наследовали друг друга в нужном порядке.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

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

 

Либо я фундаментально глючу, либо они зачем-то убили одно из популярнейших мест для custom-кода. Странно.......

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

  • 0

bfarber пишет по этому вопросу следующее:

 

Yeah, you can only override source action files. So when class files take over and do the work (and especially when they redirect, etc. afterwards) it makes things a little challenging.

 

Some class files have built in hook functionality (like publicSessions.php) but not all.

 

I think you'll have to modify this for now, but we will look into building in specific hook functionality for the posting library in the next update, as that's very useful functionality.

 

Добавить, как говорится, нечего. :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Спецы, но так как трешка ?

Тяжелей чем двушка ?

По прочитаной теме, понятно что косяков много и лишнего тоже

Ссылка на комментарий
Поделиться на других сайтах

  • 0
bfarber пишет по этому вопросу следующее:

 

Yeah, you can only override source action files. So when class files take over and do the work (and especially when they redirect, etc. afterwards) it makes things a little challenging.

 

Some class files have built in hook functionality (like publicSessions.php) but not all.

 

I think you'll have to modify this for now, but we will look into building in specific hook functionality for the posting library in the next update, as that's very useful functionality.

 

Добавить, как говорится, нечего. ;)

 

very useful functionality :D

 

"функционалити" плачет.

 

 

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

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.