Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Комната отдыха » Пересоздание движка для новостного районного сайта.


Пересоздание движка для новостного районного сайта.

Сообщений 41 страница 60 из 82

41

Ку всем.
Занимался разным, сопельки подтягивал.
Списался с Лексом, если кто такого ещё помнит, и он мне за безопасность напомнил.
Перепахивал движок, явно прописывал все пути и всё такое, дабы дыры закрыть, и попутно изломал вот это:

https://i.imgur.com/1igRquH.jpg

То есть, форму сообщения/подтверждения.
Как раз шукаю, где и как.

Так как перепахал преизрядно файлов, и не упомню, как именно это произошло; то ли в файле frontpage.php, то ли в functions.php, а то и ещё где.
Занимаюсь, в опчем, ищу.
ЗЫ Иллюстрация взята в другом месте.

0

42

Ку всем.
НАШЁЛ!!!!!1111адинадин

(Пост, возможно, будет обновляться)

Оказалось, я ночью сонный уже, сделал ошибку:
Вместо

Код:
<?
$template->pparse('confirm')
?>

написал

Код:
<?
$template->pparse('confirm_body')
?>

И форма испарилась :(
Я даже хотел откатить все изменения. Это было бы трудно, ибо движок уже полностью перепаян под новый обработчик фронт-энда ./details/includes/frontpage.php - он у меня заменил два файла, отдельные примитивные обработчики отдельно шапки и подвала, ./details/includes/page_header.php и ./details/includes/page_tail.php.
Почему я указал, что они были примитивные?
А потому, что они не обрабатывали много чего - например, сейчас можно склепать в составе ./details/includes/frontpage.php обработку респонсив дизайна, ежели потребуется.
Правда, сейчас я занимаюсь тем, что допиливаю обработчик, задаю условия и прочее, но главное уже сделано.
Он мне понадобился именно как цельный обработчик, так как я подзадолбался везде указывать два обработчика и писать много дополнительного кода.
Теперь я задачу вывода и обработки фронт-энда полностью скинул в обработчик.
В модулях достаточно указать

Код:
<?
define('IN_%MODULE%', true);
include($incl_path . 'frontpage.' . $phpEx);
?>

И ВСЁ!

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

Код:
<?
else if(defined('IN_%MODULE%')) // Укажем режим обработки
{
	$definer = 'IN_SMILES';
}

... // Некий код для обработки
... // Некий код для обработки
... // Некий код для обработки

switch($definer) // Выполняем обработанный код
{
	case 'IN_%MODULE%':
$template->set_filenames(array(
	'body' => '%template_name%.tpl'
	));
$template->pparse('header_common'); // Заданный отдельно шаблон шапки
$template->pparse('body');	// Заданный чуть выше шаблон модуля
$template->pparse('footer_common'); // Заданный отдельно шаблон подвала
	break;
}
?>

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

Также обработчик фронт-энда реагирует на системную переменную режима страницы $mode, то есть, на вызовы типа (далее пример)
./viewtopic.php?mode=edit&p=1&t=1&f=1,
из чего обработчик делает вывод, что надо грузить форму правки поста, и тд и тп.
Код самих модулей теперь во многом приблизился к phpBB3 - отличие в том, что там, в phpBB3, обработка шаблона реализована функциями, и задаётся в виде вызовов функций page_header('%имя_шаблона%'), page_body('%имя_шаблона%') и page_tail('%имя_шаблона%').
Если разгуляюсь, то и это напишу)))

Такая вот загогулина.

Добавлено спустя 14 минут 16 секунд:
Уже сейчас вижу, что довольно громоздко, хоть и хорошо работает.
Надо бы, по-хорошему, переписать на что-то более общее и компактное. То есть, задавать условия как-то иначе, и сделать один вызов парсера.

Код:
<?
// Создаём некий массив в переменной $parse_page
$parse_page = array(
	'header'	=> 'header_common',
	'body'	=> '%template_name%',
	'footer'	=> 'footer_common'
	);

if (некое условие - выбор исходя из условий вызова модулем)
{
бла бла
}

foreach ($parse_page as &$gogo)
{
    $template->pparse('$gogo' . $tplEx); // Тут шаблонизатор парсит каждый шаблон в одну страницу
}
unset($gogo);
?>

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

0

43

Добавлено спустя 10 часов 3 минуты 4 секунды:
Написать выпендрёжный обработчик-парсер не вышло, да я особо и не пытался, так как мысля организовать вызов функцией не давала покоя.
Сделал, пока настраиваю.
Спаял по образцу phpBB3 - но не всё как там, ибо написано там иначе и организовано тоже иначе, но общую канву схватил.
Настрою - распишу.

Работает примерно так:
1) В файле функций ./details/includes/function.php запилил четыре функции, page_header(), page_footer(), garbage_collection() и exit_handler(). Первая создаёт шапку, вторая подвал, а остальные, третья убирает мусор и четвёртая закрывает все соединения и прерывает обработку. Забыл указать ещё одну функцию - page_body(), она парсит тело страницы.
2) В любом файле php пишем, где нам надо вызвать шапку или подвал,

Код:
<? 
... // код 
... // код
... // код

page_header();
page_body();
page_footer();
?>

В итоге получаем состряпанную страницу, улетающую на комп юзера.

Задача стоит теперь допилить обращения к шапке (ну, что её требуется - типа заголовка, уровня доступа и тд), допилить обращения к телу и подвалу и задать возможность парсить несколько шаблонов в тело.
Потом предстоит большая нетривиальная задача перепаять под эту систему ВСЕ требуемые для работы сайта файлы.
Зато потом будет гораздо проще и легче что-то писать, так как код страниц весьма и весьма упростится.

Картинки

Файл ./details/includes/functions.php
https://i.imgur.com/stKm89K.jpg

Экспериментальный вызов во ./viewtopic.php
https://i.imgur.com/g11orsO.jpg

Всё работает
https://i.imgur.com/IERwlRN.jpg

От оригинального phpBB2 остаётся всё меньше и меньше - я уже не могу что-то без танцев с бубном туда впаять, это уже получается совершенно другой движок, ибо в ход уже пошли его основные обработчики...
Кстати, для админки осталось малость кода дописать - и объединять админку с основным сайтом будет лишь БД, как и планировалось.
Такой подход позволяет восстановить/изменить что-либо в случае ошибок кодинга или настроек дизайна и тд и тп.

Не срослось с простым шагом вверх по лестнице - зато целый пролёт одолелся запросто)))

Ушёл спать.

+2

44

Позанимался немного движком сегодня. Доделал функцию парсинга тела страницы.

Вот такая вот функция:

Код:
<? 
function page_body ($tpl_array = array())
{
global $template, $tplEx, $tpl_array, $phpbb_root_path;	// Глобальные переменные, без них не передаются значения
if (!isset($tpl_array))// Проверка: заданы ли шаблоны?
{
message_die(GENERAL_ERROR, 'Not specified templates!');// Сообщение "амба" и закрытие соединения
garbage_collection();
exit_handler();
}
else
{
foreach ($tpl_array as $var => $value)//Цикл "для каждого члена массива"
{
$template->set_filenames(array(
$var => $value	// Задаём соотношение
));

$template->pparse($var);	// Тут шаблонизатор парсит каждый шаблон в одну страницу
}
}
return;// Возврат управления
}

Функция вызывается так:

Код:
<?
// Указываем шаблоны в теле файла
$tpl_array = array(
'jumpbox' => 'jumpbox.' . $tplEx,
'body' => 'viewtopic_body.' . $tplEx
);

бла бла бла разный код
бла бла бла разный код
бла бла бла разный код

page_body('jumpbox', 'body');// Передаём шаблоны парсеру
?>

Результат:
(не обращаем внимания на лишнее - это проверка работоспособности, она убирается потом)

https://i.imgur.com/HWYRRdK.jpg

+1

45

Мде.
Работать-то оно работало - но только при явном указании нужных шаблонов.
Проблема возникала при неявном, через условие, добавлении шаблонов в теле файла.
Изменил схему, теперь точняк работает как надо: теперь оно грузит бочками любые шаблоны при любом вызове из любого места.
Для этого надо добавлять в массив имён нужное имя шаблона, и оно будет грузиться пачкой.
Вот код функции page_body():

Код:
<?
function page_body ($tpl_array) //Вызов функции
{
global $template, $tplEx, $tpl_array, $phpbb_root_path, $db; // Глобальные переменные
array_unique($tpl_array);	// Выкидываем повторы ячеек массива

if (!isset($tpl_array))	// Проверка наличия ячеек - ничего не дали
{
message_die(GENERAL_ERROR, 'Not specified templates!');	// Обманули, кражи не будет, всё уже украдено до нас
garbage_collection();	// Гасим всё
exit_handler();	// Закрываем подключение
die;
}
else //  Проверка наличия ячеек - в случае, если всё в ажуре
{
foreach ($tpl_array as $var => $value)	// Обработка каждой ячейки массива
{
if (isset($value))	// Есть ли такое значение? Есть
{
$template->set_filenames(array(	// Выставляем массив  на обработку
$var => $value
));
$template->pparse($var); // Тут шаблонизатор парсит каждый шаблон в одну страницу
array_shift($tpl_array); // Удаляем уже пропарсенный элемент из массива
}
else	// Есть ли такое значение? Нет
{
message_die(GENERAL_ERROR, 'Template cell is empty!');	// Ты втираешь мне какую-то дичь!
}
}
unset($tpl_array);	// Освобождаем переменную
}
return;	// Возврат управления
}
?>

В файле, например, viewtopic.php, сделана такая система: там несколько неявных вызовов, и они переорганизованы.

Код:
<?
$tpl_array = array(
	'jumpbox' => 'jumpbox.' . $tplEx,
	'body' => 'viewtopic_body.' . $tplEx
	);

бла бла бла
бла бла бла
бла бла бла
бла бла бла

$tpl_poll1 = array('pollbox' => 'viewtopic_poll_result.' . $tplEx);
$tpl_array = array_merge($tpl_array, $tpl_poll1);

бла бла бла
бла бла бла
бла бла бла
бла бла бла

$tpl_poll2 = array('pollbox' => 'viewtopic_poll_ballot.' . $tplEx);
$tpl_array = array_merge($tpl_array, $tpl_poll2);

бла бла бла
бла бла бла
бла бла бла
бла бла бла

$tpl_quickpost = array('quickpost' => 'quickpost_body.' . $tplEx);
$tpl_array = array_merge($tpl_array, $tpl_quickpost);

бла бла бла
бла бла бла
бла бла бла
бла бла бла

page_header($page_title, 'viewtopic');
page_body($tpl_array);
page_footer();
?>

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

0

46

Ку всем.
Я пока что перевожу сайт на показанную выше систему.
Добавлено спустя 9 часов 33 минуты 50 секунд:
Пока что не срастается перевести на указанную систему мною же написанный index.php  :rofl:
Проблема - в модульности: при организации парсинга через функцию ломаются переменные, и модули не получают данные из БД. Объявлял переменные глобальными - не помогает голосовалке и системе отображения через гриды, они (гриды) ломаются.
Оставил пока что костыль: шапка и подвал грузятся функцией, а модули и гриды - через мною же тоже написанный frontpage.php.
Полагаю, надо грузилку модулей писать в виде класса или функции, тогда она будет доступна из любого места кода.
Также переписываю фотоальбом: он слишком блочит картинки - для запрета хотлинкинга выдаёт фотки через Myme Type, а не по имени-отчеству, да и доступ к нему надо местами ограничить.
Для этого он будет переведён на режим работы а-ля админка, с валидатором доступа и фреймами, но картинки будут работать по-другому, через прямые ссылки. Надо будет вообще переписать отображательную часть и грузить их через объявляемое автором (постером) разрешение на хотлинк для каждого фото. Это если смогу...

0

47

Ку всем!
1) А у нас чот форма ответа поплыла:

https://sun9-4.userapi.com/c853424/v853424715/24aa6f/rUPYyVYprGA.jpg

2) Записываю идею.
В модулях, в файле конфигурации, вносим данные для админки. Например, мне сейчас для передовицы надо чтоб количество топиков для передовицы (да, какое-то тавтологиново) задавалось в БД, но чтоб модуль можно было выкинуть и вкинуть обратно. Также, тем же мухтаром надо этому модулю задавать и период отображения передовиц в карусели (да, там будет карусель из N новостей), и временной промежуток, из которого брать передовицы - например, неделя назад.
И надо чтоб статус передовицы задавался - я придумал передовицы брать из тех тем новостей (а новости у меня - это тупо первые посты топиков, отмеченные как новости), которые отмечены как прилепленные (или "выделенные" здесь, на myBB, например). Но вот сидит мысля, что можно и отмеченные как объявление использовать - и это надо тоже через админку задавать.
Этого функционала пока нет и его надо писать полностью.

На сейчас я пока только составляю хитрый запрос к БД, который будет коротко, по возможности за одно обращение, выдавать данные на N новостей для карусельки с передовицами.
Интересного пока больше нет, ибо я ещё не весь движок перевёл на функции с шапкой и подвалом, но я работаю над этим. Из сделанного - нашёл логическую ошибку, из-за которой у меня не отображались тексты на странице подтверждения: я сдуру обозвал глобальными две переменные, которые сугубо внутренние в функции message_die(). Я говорю про $message_title и $message_text. Не совершайте моих ошибок, не объявляйте переменные глобальными впрок)))

Такая вот загогулина.

0

48

Записываю мыслю:

Вот что было бы дельно (я на phpBB постараюсь продумать реализацию) - это возможность вместо первопоста выделять несколько постов, а потом при показе объединять их в один якобы, первопост.

Думаю, тут такое:
1) Выделяем галками несколько постов, после их написания, в мод.панели, как первопост. Либо иначе - см. п.3
2) В БД, в таблицу "posts" надо добавить поле 'pointed' - там будет обращение к постам как к добавке к первопосту.
3) Когда псто пишется, в форме ответа (не в быстрой, хотя и так можно) ставим галку "добавка к первопосту" - это приводит к вотыканию единички в поле в п.2
4) При показе топика смотрим, есть ли указание в БД п.2, или нет? Если да - добавляем контент этого поста к контенту первопоста. Если нет - идём дальше.

Сделать такое реально - но из подводных камней у нас сложности в прописыванием обращения к полю п.2 во все обращения к таблице "posts".
Я это с новостями проходил - только с третьей или четвёртой попытки я прописал всё, что надо, а допиливал потом почти полмесяца. Но это я, я не торопился, хотя оно и всё равно сложно.

Так мы обойдём ограничение по объёму контента постов применительно к первопосту. Таким образом, у нас будут формально в БД несколько постов - но видны они будут как один очень большой пост нереально большого объёма.

Возможно, скажете вы, проще будет реализовать добавку сообщения к предыдущему, как оно много где реализовано?
Так вот нет, скажу я вам: там контент следующего поста доливается к контенту предыдущего (если совпадает юзернейм), в одну и ту же ячейку БД, с прибавкой текста (добавлено итд и тп).

Если надо - дарю идею, творите сами :)

0

49

А я тут кой-чего накропал...

В общем, задрало меня перезапускать Денвер туда-сюда (временами это приходится делать) из написанного мною же автостарта: вызывать автостарт, жать, ждать, закрывать автостарт, и я адаптировал к нему трей-стартер от EasyPHP Devserver'а.
Неудобство было в том, что на столе при работе дофига всего открыто, до автостарта приходится долго копать.
Исправил это упущение :)

Картинка:
https://forumupload.ru/uploads/0000/14/1c/22142/554704.jpg

Сидит в трее, работает через автозагрузку, удобно :)
К тому же, как видно из иллюстрации, через него же вызываются и необходимые приблуды и страницы :)

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

Если кому-то надо - скину архивом.

ЗЫ Нажатием на "Open Dashboard" вызывается вебморда Денвера.
ЗЗЫ Взять трей-иконку можно тут, у меня на сайте.
Установка: распаковываем в корневую папку Денвера (у меня это L:\Server\), отправляем на Рабочий Стол ярлык от экзешника webinterface.exe, обзываем его как-нибудь типа "Denwer", и юзаем на здоровье :)

+2

50

Я на очередном тестовом сайте в Денвере, реализовал так наз. "чистые ссылки".
Вот как оно бывает? Позвонил мне мой начальник, попросил найти кой-какую документацию в интернетах и бросить в него ссылкой, чтоб он скачал себе уже сам.
Я пошёл рыть интернеты и нарыл сайтец маленький, но с большим хранилищем требуемой информации. Так как эта инфа и мне самому нужна - слил сайт целиком себе; в начальника кинул ссылками, и взялся качать.
Покуда вкукоживал его в Денвер, попробовал вкукожить и это дело, взяв код из новостного исходного своего сайта.

И получилось :)

Иллюстрация

https://i.imgur.com/7gQrzxy.jpg

Прикол - в адресной строке: неким не очень пока что постижимым для меня образом через Symfony, из имён ссылок получается значение для переменных $page и $mode.
Впрочем, краем головы я уже догадываюсь, как именно это сделано :)

Сделал через подключение Symfony, оно работает отлично.
Но вот чтоб вкукожить в мой движок - мама дорогая, это же ж работы на месяцы :(
Это же придётся:
а) Добавлять поля в БД - дабы топик ещё при создании получал имя.
б) Обрабатывать это дело - например, создавать имя будущей ссылки на лету при постинге по примеру тех же Вордпресса или там Джумлы.
в) Прописывать код во все места.
г) Делать поддержку управления этим всем через админку - типа ВКЛ/ВЫКЛ в настройках.

Код файла index.php
Код:
<?php
define('IN_SITE', true);	// Указание на нормальный запуск
require_once './details/includes/ext.inc';// Расширения кода и шаблонов
require_once './details/includes/config' . $phpEx;// Конфиг сайта
require_once $site_root . 'vendor/autoload' . $phpEx;// Приблуды
$page = (isset($_GET['page'])) ? $_GET['page'] : $_POST['page'];// Задание вызова страниц
$page = htmlspecialchars($page);	// Зачистка вызова
$start = (isset($_GET['start'])) ? $_GET['start'] : $_POST['start'];// Задание вызова страниц
$start = htmlspecialchars($start);	// Зачистка вызова
require_once $incl_path . 'logic' . $phpEx;// Логика ссылок
require_once $incl_path . 'funcs' . $phpEx;	// Функции
require_once $incl_path . 'simple_html_dom' . $phpEx;// Обработка метатегов

if (isset($_GET['start']))
{
	$page = 'docs/' . $start;
}

if (!isset($page))	// Индекс если нет вызова
{
	$page = 'index';
}

$metatag = get_meta_tags($site_root . 'pages/' . $page . $tplEx);	// А что там у нас в метатегах?
$hdr = $metatag['title'];// Задаём title

include($incl_path . 'frontpage' . $phpEx);// Вызываем обработчик фронт-энда
exit;
?>

Такая вот загогулина - и работает!

ЗЫ Теперь надо на тестовом сайте придумать, как всю папку ./vendor перенести в принятую у меня ./details/
Добавлено спустя 1 час 36 минут 45 секунд:
Перенёс, банально добавив в index.php ./details/ в путь к папке vendors.
Странно, сначала это не работало...

+1

51

Пытался мигрировать на Apache 2.4 и php 7.0
Не срослось :(

0

52

Хе-хе, не срослось полностью мигрировать на Apache 2.4 и php 7.0 - зато я всё равно вкукожил их как параллельный поток!   :glasses:
Для них были написаны новые "запускалки", запускающие Денвер параллельным путём :)
А именно:

1) В hex-редакторе подправлены вендовые экзешники-заглушки run.exe, stop.exe и restart.exe, в каждый внесён ключ запуска main24 вместо просто main
2) Добавлен каталог \scripts\init.d24 - на него ссылаются Python-заглушки в каталогах \scripts\start\, \scripts\stop\ и \scripts\restart\
2) Апач 2.4 установлен по адресу \usr\local\apache24
3) php 7.0 установлен в каталог \usr\local\php7
4) В меню запуска и трей-иконку внесены изменения для запуска двух комплектов виндовых экзешников-заглушек - два комплекта, Apache 2.2+php5 и Apache 2.4+php7
5) Можно теперь запускать либо то либо то.
6) Ещё добавлю отдельное включение разных версий Mysql - их есть у меня версий 5.5 и 5.7

Иллюстрации:

Узреть

Новые запускалки
https://i.imgur.com/GN67RKe.jpg

phpinfo версии 2.2
https://i.imgur.com/Ubjzd83.jpg

phpinfo версии 2.4
https://i.imgur.com/tVEvy7d.jpg

Правда, ещё надо крепко новый сервер настраивать - это дело небыстрое, со временем настрою, тем более, что я преимущественно буду на старом серваке обитать.

Такая вот загогулина.
Добавлено спустя 27 минут 25 секунд:
Если будут желающие - распишу подробнее, что и как, в виде некоего мануала.
ЗЗЫ Совсем забыл - файлы других версий взял тут.

+1

53

Ку всем!

Я потерялся немного, да. Занят был, и вот чем...

Для возможности новых движков и CMS накачал и наставил кучу разных серверов для Винды - WAMPP, XAMPP, EDS, OpenServer, Endels Server и ещё вагон.
Много изучал и удивлялся, даже поначалу подумал о миграции на кого-то из них. Но потом обнаружилась беда!
Кто-то из этих козлов поломал мне Денвера, НАПРОЧЬ  :angry:

Даже после удаления банды и очистки реестра Денвер не заработал :(
Впрочем, Денвер с реестром особо не работает. Файл hosts тоже в порядке.
Что самое характерное - голый из коробки Денвер, из дистрибутива - работает как надо!
У меня же он наполовину самописный давно - от скриптов на Перле до более свежих Апача (последний из 2.2) и прочая.
И он перестал работать!

Пришлось засучить рукава и написать новый. И да, я сделал ему ребрендинг - теперь это просто WebServer, а не Denwer.
Переезжаю на него сейчас.
Возникли трудности - куда ж без них...
Например, у меня БД сидят не на локальном хосте, а на отдельном сервере http://database/ и чот сервак издох.
Пришлось срочно переезжать обратно на локалхост.

И тд и тп.

Новый веб-сервер зато имеет искаропки два Апача версий 2.2 и 2.4, nginx и PostgreSQL MySQL 5.1 и 5.7, php 5 и 7.
Остальное пока мне не надо, хотя дистрибутивов накачал, да и басурман пограблю, да.

Сделал новый значок - он (в перспективе) будет менять цвет лампочек при управлении серваком, я это ещё не до конца проработал.

https://i.imgur.com/hz9FnqO.jpg

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

https://i.imgur.com/mDOxE5h.png
https://i.imgur.com/UX8jhyk.png
https://i.imgur.com/QZ0EBKp.png

Такая вот загогулина.
Добавлено спустя 8 часов 26 минут 38 секунд:
Хм...
Починил Денвер. Смоделировал ситуацию.

Оказалось, что каким-то мухтаром Денвер был запущен при попытке запустить кого-то из банды, описанной выше - в результате чего был запорчен файл httpd.conf от Денвера.
Точнее, не запорчен, а ему дадены права чужой учётки, настолько чужой, что я еле вернул к нему доступ.
Файл hosts тоже получил чужих прав.

Сейчас разобрался, всё везде установил как было, и даже Денвер заработал - когда я уже изготовил другой сервер и начал на него переезжать)))
Реализовал давнишнюю мечту: сделал управление запуском/остановкой, минуя EXE-заглушки, чисто скриптами, осталось только приxyяpить монитор сколхозить работу скриптов из вебморды.

+2

54

Ку всем!

(пост будет обновляться)

Навоевавшись с сервером (я свой самописный сервак вкукожил-таки вместо Денвера!), проверив и настроив работу, правда, только пока что старого Апача, так как он мне нужен, я взялся за сайт.
Кстати, как ни странно, вебсервер стал намного быстрее - чудеса просто...
Он и грузится быстрее, и сайты отдаёт тоже реактивно. Как оно так произошло - пёс его знает.
И это притом, что я починил и подключил померший давно Постгрес.

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

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

Я вот думаю вот что: надо писать код, который будет при вызове модулей "Новости" или "Передовица" делать такие телодвижения: проверять дату и сносить выделение тем, которые висят на сайте уже больше недели: если тема просто выделена (то есть, topic_type = 1) - убираем выделение, если объявление (то есть, topic_type = 2) - оставляем. Если простая тема (то есть, topic_type = 0) - идём мимо.

Потом надо начинать-таки думать о разделении новостей по сельсоветам  - то есть, организацию и обработку таблицы phpbb_settles и добавки куда надо (например, в phpbb_topics) полей settle_id.

Если организую phpbb_settles - то потом по этому же образцу можно и таблицу phpbb_hashtags (и полями hashtag_id) замутить, вот тебе и хэштеги)))

ЗЫ Иллюстрации забыл.

Иллюстрации

Запрос в БД
https://i.imgur.com/gZ8g8Qd.jpg

Проверка запроса: результат есть.
https://i.imgur.com/9g5x6VO.jpg

Параметр row: array показывает нам, что массив получен и данные из запроса есть - ибо я обработку ещё не писал.

ЗЗЫ Тестировал запрос тем, что нагадил в БД три целевые темки и заставил сайт выдать их данные.
Получил три поста из выделенных тем. Экономичный, правильный запрос в БД - один удар и три дырки)))
Правда, я ещё не продумывал ограничение - а его надо делать, иначе оно мне всю оперативку загадит, если тем за неделю будет много...

Работает приблуда, надо дальше писать.

+1

55

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

0

56

Озвучиваю идею.
Если кто-то задумает применить - на здоровье, главное, сошлитесь на автора, то есть, меня :)
Делаем разметку шаблона страницы гридами, причём не так:

Пример

https://i2.imageban.ru/out/2021/07/08/c02afa115a77237910a06c9f14cb60b4.jpg

А вот так:

Картинка из Инета

https://i2.imageban.ru/out/2021/07/08/89b4f504f0e586ca60009aec09608603.jpg

То есть, "квадратиками-шмадратиками". Не обращайте внимания, что левая картинка, пример надо было клепать слишком долго, принцип ясен и так, а именно - разграфить страницу сеткой примерно в 20px.
Таким образом, получаем возможность привязать любой элемент страницы в любое её место, а если применить механизм в админке для задания квадрата, то даже можно делать это из БД динамически.

Как вам мысля?

Не знаю уж, успею ли написать до отъезда, потому и записал сюда.

Сложности такие в этом: задолбаешься задавать сетку, притом желательно применять не пикселы (px), а "фольксвагены" (vw). Остальное дело техники.
Подход с area тоже возможен.

0

57

John Warner написал(а):

Таким образом, получаем возможность привязать любой элемент страницы в любое её место,

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

Ладно опустим вариант с много форумами... Личный сайт... Ну и зачем мне размещения по сетке, коли я задав любому блоку позицию absolute могу перемещать его в любое место с точностью до пиксел ? Причем все эти блоки могут быть в исходнике страницы просто сложены кучкой, без всякой разметки... Т.е. я работаю только со стилем... Главное чтобы сайт мог принимать этот мой стиль и прописывать в <head>
вот как-то так мои рассуждения...

Возможно у тебя будут какие-то существенные аргументы и возражения, с удовольствием выслушаю  :flag:

Отредактировано Deff (Чт, 8 Июл 2021 16:17:58)

0

58

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

Страница грузится тридцать секунд, Карл!

Что он там натворил - пока без понятия.
Меня попросили вкукожить радио-плеер на сайт, в шапку, и я это сделал. Обкатал локально и закинул в сеть на сайт.
Там летает - у меня локально, аццки тупит!
Натурально, у меня процессоры нагружаются до 80% при загрузке!
Вот отчего серваки и умирают...

ЗЫ Другие сайты на локальном сервере - летают, только этот тупит.
Это называется "неэффективный код".

0

59

John Warner написал(а):

Натурально, у меня процессоры нагружаются до 80% при загрузке!

может какой нидь случайный цикл в функции замкнул ?

Отредактировано Deff (Чт, 8 Июл 2021 16:23:54)

+1

60

Deff написал(а):

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

Да это я продумывал просто идею для вёрстки страницы.
Как ты знаешь, я люблю простые шаблоны, без миллиона вложений DIV в DIV.
Если делать сравнительно простой шаблон, он теряет преимущество сложных, с миллионом вложений - гибкость. Как ты сделаешь раз, так оно и будет, и при добавлении элементов или переделке, приходится перепахивать весь шаблон.
Я подумал, что если замостить страницу "тайлами", как их называют игроделы, то станет доступна возможность тотального изменения страницы нажатием двух-трёх кнопок в админке.
Мы просто указываем элементу требуемый тайл.

Отредактировано John Warner (Чт, 8 Июл 2021 16:23:57)

+1


Вы здесь » Единый форум поддержки » Комната отдыха » Пересоздание движка для новостного районного сайта.