Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Smolenkov_BN

Страницы: [1] 2
1
К моему величайшему сожалению я не владею языком PHP на уровне "мастер-класс", хотя могу корректировать коды и устранять ошибки. В качестве примера дам коды применения PHP в качестве шаблонизатора урезанной (без CSS и JS) и упрощенной (всего 3 раздела) модели HTML5 страницы, которые я когда-то использовал для модернизации PHP-Fusion приведу ниже:
<?php
/*
  Start CMS
*/
if (preg_match("/maincore.php/i", $_SERVER['PHP_SELF'])) { die(); }

/*
  Calculate script start/end time
*/
function get_microtime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

define("START_TIME", get_microtime());
define("IN_FUSION", true);

/*
  Prevent any possible XSS attacks via $_GET.
*/
function stripget($check_url) {
  $return = false;
  if (is_array($check_url)) {
    foreach ($check_url as $value) {
      if (stripget($value) == true) {
        return true;
      }
    }
  } else {
$check_url = str_replace(array("\"", "\'"), array("", ""), urldecode($check_url));
if (preg_match("/<[^<>]+>/i", $check_url)) {
return true;
}
}
return $return;
}

/*
  Prevent any possible XSS attacks via $_GET.
*/
if (stripget($_GET)) { die('Prevented a XSS attack through a GET variable!'); }

/*
  Locate config.php and set the basedir path
*/
//$folder_level = ""; $i = 0;
//while (!file_exists($folder_level.'config.php')) {
//  $folder_level .= "../"; $i++;
//  if ($i == 7) { die('File config.php not found'); }
//}
//define("BASEDIR", $folder_level);
//require_once BASEDIR."config.php";

/*
  If config.php is empty, activate setup.php script
*/
//if (!isset($db_name)) { redirect("setup.php"); }
//require_once BASEDIR."includes/multisite_include.php";
?>

<?php
/*
  Before created variables
*/
//error_reporting(E_ALL);
if (!defined('IN_FUSION')) { die('<b>Client Error:<br>404 Not Found</b>'); }
$charset='UTF-8';
$application_name='Free Web Site Link';
$author='Boris Smolenkov';
$description='Free Web CSS, HTML, JS, PHP Tutorials';
$generator='Free Web';
$keywords='css,html,js,php';
$title='Free Web Tutorials';
$base_href='http://localhost/';
$link_rel='stylesheet';
$link_href='css/default.css';
$script_type='text/javascript';
$script_src='js/default.js';
$copyright='"Free Web", 1992 - '.date('Y');

$section='Articles Section';
$article1='<h4>Article 1</h4>
<p>
1. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<br>Pellentesque in porta lorem.
<br>Morbi condimentum est nibh, et consectetur tortor feugiat at.
</p>';
$aside1='<i><h5>Aside 1</h5>
<p>
1. This is an "aside" for the first article.</i>
</p>';
$article2='<h4>Article 2</h4>
<p>
2. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<br>Pellentesque in porta lorem.
<br>Morbi condimentum est nibh, et consectetur tortor feugiat at.
</p>';
$aside2='<i><h5>Aside 2</h5>
<p>
2. This is an "aside" for the second article.</i>
</p>';
?>

<?php
/*
  HTML5 Page Model
*/
//error_reporting(E_ALL);
if (!defined('IN_FUSION')) { die('<b>Client Error:<br>404 Not Found</b>'); }
echo
'
<!doctype html>
<html>
<head>
<meta charset="'.$charset.'">
<meta name="application-name" content="'.$application_name.'">
<meta name="author" content="'.$author.'">
<meta name="description" content="'.$description.'">
<meta name="generator" content="'.$generator.'">
<meta name="keywords" content="'.$keywords.'">
<title>'.$title.'</title>
<base href="'.$base_href.'">
<link rel="'.$link_rel.'" href="'.$link_href.'">
<script type="'.$script_type.'" src="'.$script_src.'"></script>
</head>
<body>
<header>
<h1>'.$title.'</h1>
<h2>'.$author.'</h2>
<b>'.$copyright.'</b>
</header>
<nav>
<ul>
<li><a href="#"><b>CSS</b></a></li>
<li><a href="#"><b>HTML</b></a></li>
<li><a href="#"><b>JS</b></a></li>
<li><a href="#"><b>PHP</b></a></li>
</ul>
</nav>
<section>
<h3>'.$section.'</h3>
<article>
'.$article1.'
<aside>
'.$aside1.'
</aside>
</article>
<article>
'.$article2.'
<aside>
'.$aside2.'
</aside>
</article>
</section>
<footer>
<p>
<h6>Copyright &copy; '.$copyright.'<br>
All rights reserved.</h6>
</p>
</footer>
</body>
</html>
'
?>

2
> Smolenkov_BN, Вы потратили кучу времени на анализ и на написание этих постов.
> Хорошо разбираетесь в коде, есть предложения по улучшению?..
- Все предложения, основанные на личном опыте создания информационных систем промышленных предприятий на базе стандартных СУБД MS SQL, MS VFP и Oracle заключаются в одном единственном пункте:
правильно разделить хранимую полезную информацию между базой данных (БД) и файлами данных (ФД)!
Правильное разделение функций БД и ФД при больших объемах хранимых данных дает реальный выигрыш в быстродействии до 17 раз в сравнении с другими известными двумя способами:
1) все данные хранятся в БД;
2) все данные хранятся в ФД.
Алгоритм работы программы в среде стандартной СУБД поясню на конкретном примере работы с научными, техническими и технологическими документами.
Имеется некий документ в формате DOC объемом 100 страниц. С помощью CMS его необходимо опубликовать в Интернет или в Интранет. По требованию заказчика используется система классификации и кодирования ГРНТИ
http://grnti.ru/
Оператор в программе вызывает процедуру ввода нового документа и в открывшемся окне заполняет форму с полями данных стандартной библиотечной карточки документа:
- код ГРНТИ (например, 47.01.14);
- автор(ы);
- название;
- город издания;
- страна издания;
- издательство;
- год издания;
- количество страниц;
- количество иллюстраций (при необходимости);
- код ISBN (при необходимости);
- аннотация.
Нажимается "Ввод".
Информация заносится в БД.
Далее другая процедура на дисковом носителе проверяет наличие цепочки папок:
documents/47/01/14/
При необходимости автоматически создает отсутствующие звенья.
В конечную папку цепочки помещают файл для записи первой страницы документа
documents/47/01/14/1.inc
В этот файл записывается один символ "пробел".
Открывается окно редактора для правки файла первой страницы
documents/47/01/14/1.inc
В него прямо из окна MS Word методом "выделить-копировать-вставить" переносится первая страница документа.
Нажимается "Ввод".
Редактор сохраняет в формате HTML исключительно редактируемую часть (без тегов !doctype, html, head, body и т.п.).
Далее сохраненная страница с помощью шаблона полного HTML документа выводится на экран.
Процесс ввода страниц повторяется до завершения ввода всего документа.
В папке
documents/47/01/14/
оказываются 100 небольших файлов
documents/47/01/14/1.inc, ..., documents/47/01/14/100.inc
Вот примерно так работает алгоритм раздельного хранения данных в БД и ФД.

3
Как сказал Карлсон Который Живет На Крыше:
- Продолжим наше общение!

Недостаток в процессе редактирования
Существенный недостаток процесса редактирования в Danneo CMS - это загрузка сразу всего текста статьи с тегом разделения (паженации) страниц. Давайте в уме смоделируем наихудший вариант этого процесса. Представим себе следующие исходные условия:
1) бесплатный захудалый российский хостинг с общим объемом выделенной оперативной памяти не более 8 Мб и жесткими лимитами месячного трафика;
2) статья пользователя в виде диссертации или монографии объемом более 300 страниц с большим количеством внешних веблинков и наглядных материалов.
После каждой вставки или правки блока текста с его обязательным сохранением, а опытные пользователи поступают именно так, весь объем статьи будет постоянно регенерироваться в редакторе. На это требуются дополнительные объемы времени и лимиты трафика. У занятых пользователей почти всегда не хватает времени, а на бесплатном захудалом хостинге почти всегда установлены лимиты трафика. Единственный выход из создавшейся ситуации - это постраничное редактирование и хранение статей в БД или в файлах. При этом автоматически отпадет необходимость обработки кода тега разделения (паженации) страниц.
Хорошей альтернативой данному предложению также может стать возможность загрузки объемных статей в формате PDF с возможностью их постраничного чтения с помощью просмотрщиков типа ViewerJS или PDFJS.

Автоматизация процесса заполнения каталога
Опыт работы с Opencart CMS подсказывает: необходимо обязательно автоматизировать процесс заполнения каталога в Danneo CMS. Вводить вручную сотни позиций товаров и иных ценностей - это напрасная трата времени и трафика. Поэтому необходимо предусмотреть возможность автоматического ввода данных из предварительно отредактированного файла, например, типа CSV в архиве типа ZIP. Возможно, следует рассмотреть подобный вариант и в отношении списка пользователей.

Многоязычность с помощью тегов
С целью экономии количества дополнительных сайтов и таблиц для них предлагаю сделать многоязычность на основе языковых тегов. Приведу пример использования в поле или в форме текста:
Danneo CMS [eng]the best in the world[/eng][rus]лучшая в мире[/rus]!
Англоязычный гость или пользователь увидит на мониторе "Danneo CMS the best in the world!", а русскоязычный - "Danneo CMS лучшая в мире!". Подобную идею я предлагал автору PHP-Fusion CMS Нику Джонсу. Идея ему понравилась. PHP-Fusion CMS уже подразумевала многосайтовость, для чего в версии 7.00 он специально ввел файл
includes/multisite_include.php
Ну, а я сделал инструкцию и парочку файлов PHP в качестве примера для инсталляции нескольких сайтов на уже существующей версии движка. Китайцы вообще были в восторге. Но, к величайшему сожалению, воплотить эти идеи в жизнь помешала болезнь Ника Джонса. Позже это сделали в Serendipity CMS и в некоторых других.

Лишние JS файлы в текстовом редакторе
Файлы
admin/js/editor/tinymce/langs/en.js
js/editor/tinymce/langs/en.js
не несут никакой информационной нагрузки, потому что в TinyMCE 4.3.2 английский язык является встроенным и не требует внешних файлов. Да и версию редактора давно пора обновить хотя бы до 4.3.13 или даже до 4.6.7.

4
С Вашего позволения продолжу перетирать косточки Danneo CMS.

Низкая скорость администрирования
Вот несколько прописных истин администрирования любой CMS.
1. Чем меньше длительность подключения компьютера к админпанели CMS, тем ниже вероятность ее взлома через компьютер админа.
2. Вложенность меню админпанели не должна превышать 3 переходов по веблинкам.
3. CMS должна обеспечить максимальную скорость заполнения форм админом:
- низшей квалификации - более 60 знаков в минуту (1 знак в секунду);
- средней квалификации - более 120 знаков в минуту (2 знака в секунду);
- высшей квалификации - более 240 знаков в минуту (4 знака в секунду).
Остановимся на этом пункте подробнее.
Для заполнения даты в формате
ГГГГ-ММ-ДД
по ГОСТ ИСО 8601-2001 "Представление дат и времени" админу высшей квалификации при наборе на клавиатуре понадобится 2 с (8 знаков цифр и 2 знака табуляции). Запомним это значение времени.
В Danneo CMS для набора даты "День рождения" предусмотрены выпадающие чекбоксы: день, месяц и год. Результаты исследований показали, что скорость реакции (биологический пинг) админа при работе на компьютере по дисплею, а не по памяти как при наборе текста, определяется по следующей схеме:
1) админ увидел изображение выпадающего чекбокса;
2) админ распознал изображение и принял решение на выбор;
3) админ дал команду мышцам руки нажать кнопку.
И так 3 (три) раза по каждому выпадающему чекбоксу. Скорость реакции (биологического пинга) по каждому пункту вышеприведенной схемы у админа:
- низшей квалификации - до 1,6 с;
- средней квалификации - до 1 с;
- высшей квалификации - до 0,6 с.
Админ высшей квалификации на заполнение одного выпадающего чекбокса затратит до
0,6 с * 3 = 1,5 с
Следовательно, админу высшей квалификации на заполнение трех выпадающих чекбоксов понадобится
1,5 с * 3 = 4,5 с
Сравните скорости заполнения даты:
- при наборе с клавиатуры - 2 с;
- при заполнении выпадающих чекбоксов - 4,5 с.
При наборе с клавиатуры скорость работы админа выше примерно в 2 раза!

Потенциальная опасность в схеме буферизации
В Danneo CMS применяется буферизация PHP по схеме:
ob_start();
... ob_get_contents();
ob_end_clean();
...
ob_end_flush();
Вопреки рекомендациям разработчиков PHP я бы изменил ее на следующую:
ob_start();
... ob_get_contents();
ob_clean();
...
ob_end_flush();
Дело в том, что функция "ob_end_clean" может влиять на значения переменных окружения текстового редактора, если он используется в режиме реверсирования при редактировании. Я пока не вникал в тонкости Вашего алгоритма, поэтому можете считать данный пункт как общее предупреждение.

О применении связки CKEditor и KCFinder
Применяемый в составе Danneo CMS текстовый редактор "Крошка смелокодов" (TinyMCE) приносит неприятности админам своей ограниченностью функций и отсутствием качественного русского перевода интерфейса. На мой взгляд имеет смысл заменить или предложить в качестве альтернативы связку CKEditor+KCFinder. У меня имеется достаточный опыт подключения именно через PHP всех версий CKEditor от 3.6.6.2 до 4.7.3. Последнюю версию 4.7.3 подключил в обновленную мною SiNG CMS Base 2.12.7 буквально вчера. Добавляется файл PHP с установками редактора и в нужном месте инклюдится в Вашу программу. Работает через буфер, поэтому никаких дополнительных временных файлов в системе не требуется. Если надо, то могу поделиться.

Улучшение дизайна меню
В качестве наглядного пособия предлагаю посмотреть демо-меню с бегающим указателем (см. вложение), которое мне прислал в 2009 году ныне покойный Nick Jones
https://www.php-fusion.co.uk/infusions/book_of_condolences/condolences.php
В составе основного пакета меню дополнительно имеется PHP-код, который создает пропорциональный длине пункта меню скачок указателя и который отсутствует в демо-меню. Оно может скрасить унылый имидж темы по умолчанию в Danneo CMS.

5
> Вы забыли (наверное) уточнить, сколько раз вам приходилось восстанавливать конкретно Danneo CMS, после взломов?
- Версию 1.5.x - ни разу не восстанавливал, потому что она пока не получила такого широкого распространения как Opencart. А вот с версией 0.5.4 нам пришлось дополнительно повозиться, зато она и сегодня "пашет как трактор" в бесприбыльной и неблагодарной сфере. За это Вам огромное сердечное "спасибо"!

> В DN, кроме обычных мер безопасности, еще есть "секретное слово"...
> Кроме этого, панель всегда можно закрыть .htaccess, как дополнительной защитой...
> Что касается SQL-инъекций, также, пожалуйста, примеры в студию.
- Первая же выявленная SQL-инъекция накроет "известным органом" и "секретное слово", и ".htaccess". А примеры уязвимостей по версиям Danneo CMS Вы можете посмотреть, набрав в любом приличном поисковике всего два слова:
Danneo vulnerability

> Danneo CMS, это открытая и свободно распространяемая система. Если есть уязвимости, рассказывайте, будем устранять.
> Мы можем пропустить или проигнорировать предложения относительно общего функционала, но только не сообщения об "дырах" в системе.
> И, здесь, мы рассчитываем на помощь сообщества.
> На конкретную помощь, а не на голословные рассуждения, - мол возможно, может быть, и пр.
> Абстрактные разговоры только отвлекают, и мешают сосредоточиться на главном.
- Если Вы позволите, то я в свободное время подготовлю необходимую информацию, и мы с Вашим непосредственным участием попробуем проделать необходимые операции по исследованию CMS на уязвимость. А пока можете посмотреть этот веблинк:
https://www.ibm.com/developerworks/ru/library/os-test-websites/index.html

Я с искренним уважением отношусь к людям, которые что-либо делают бесплатно для блага других людей. Поэтому не считайте меня своим врагом. Несколько слов о себе.
Впервые мне удалось выйти в Интернет в 1992 году. Под DOS использовал Arachne в качестве графического браузера и Astra в качестве системы передачи информационных файлов. А вот последние годы моей профессиональной деятельности:
1995-2000 - заведующий отделом компьютерной обработки информации исполнительной дирекции областного отделения фонда социального страхования;
2000-2008 - главный инженер проекта (ГИП) и по совместительству начальник отдела института по проектированию систем автоматизации производства;
2008-2009 - начальник отдела автоматизации систем управления производством в коммерческой фирме;
2009-2013 - эксперт по IT товарам и технологиям "ноу-хау" представительства областной торгово-промышленной палаты и одновременно администратор информационных технологий товарной биржи (по трудовому соглашению).
2013-настоящее время - пенсионер и не торопясь занимаюсь вопросами IT в школьном образовании.
Мне пришлось курировать кучу серьезных проектов по созданию Интранет/Интернет на предприятиях металлургической отрасли как внутри страны, так и за рубежом. Через мои руки прошло более 1000 свободных и проприетарных CMS различного назначения, большая часть которых давно "канула в лету". Поэтому у меня накопился некоторый опыт по выбору железа и программ, а в сложных случаях я могу воспользоваться услугами серверов и специалистов IT-полигона проектного института.
А Вы чем занимаетесь за пределами этого форума, если не секрет?

6
> Smolenkov_BN, спасибо за выявление ошибок, и подробный разбор.
> Разумеется все баги будем исправлять.
- Приятно читать, но неприятно вспоминать.
1. Исправить строку с копирайтом сайта
http://forum.danneo.ru/index.php?topic=318.0
Наличие лишь одного символа копирайта (C) не обеспечит положительное решение в суде по защите авторских прав. Только обязательное наличие слова "Copyright" с символом копирайта (C) или без него и обязательно с указанием периода действия авторского права в годах (например, 1992-2017) даст положительное решение суда в пользу владельца сайта. Это особенно остро проявилось в период 1992-1998 г.г., когда идеи из бывшего СССР стали появляться на сайтах в Интернет. Многие российские авторы изобретений тогда "остались с носом при своих интересах".
2. Защита адреса email от спамботов
http://forum.danneo.ru/index.php?topic=323.0
Адрес email из мода "Контакты" до сих пор "свистит" на весь Интернет, потому что доступен даже самым примитивным ботам. Например, лично я рекомендовал бы для этой цели использовать какой-нибудь известный JS преобразования текста в картинку.

> Вот только с некоторыми вашими выводами, позволю не согласиться.
> Особенно относительно высказывания "...как это сделано во всех приличных CMS".
> Нужно было добавить "во всех дырявых CMS", и заодно назвать имена этих "приличных" CMS. Чтобы было понятно о ком речь.
- Существует много приличных CMS. Первой на ум пришла Elxis CMS, где довольно грамотно сделана защита.

> В Danneo CMS административная панель максимально отделена от публичной части системы, и это не недостаток, а как раз наоборот, преимущество.
> Админка более надежно защищена.
> Данное разделение было принято еще в первых версиях DN, и я не стал менять этот принцип в новой ветке.
> Это, являлось поводом для бесконечных споров с пользователем Staf4.
> Staf4, предлагал совместить базы пользователей и админов, а заодно и функционал.
> Основная мотивировка, не улучшенное управление или безопасность, а сокращение количества файлов.
> Я против такого решения.
> Экономия общего веса системы в 100 кб, не может считаться хорошим поводом, когда речь идет о безопасности.
- Несмотря на все ухищрения с разделением административной и пользовательской частей уязвимость Danneo CMS остается на уровне Opencart CMS, где все сделано примерно аналогично. Знаете, сколько раз мне приходилось восстанавливать учетную запись администратора у знакомых е-шопников? А причина одна - наличие общей БД! Происходит очередная SQL-инъекция (после обновления, инсталляции нового модуля или работы нечистоплотного пользователя), и владелец сайта начнает судорожно искать спеца, потому что изменились или исчезли учетные записи всех админов. В связи с этим на многих хостингах уже стали предлагать не одну, а сразу две БД с различающимися логинами и паролями: в первую обычно заносятся таблицы всех пользователей и всех каталогов, а во вторую - таблицы учетных записей админов, конфигурации системы и снимок первой БД. Danneo CMS пока не обладает возможностью разделения таблиц по разным БД для подобной цели. Следовательно, у меня нет пока оснований согласиться с Вами. Если бы все было хорошо, как Вы пишете, то не было бы подобных веблинков:
http://webprovincia.com/opencart/parol-ot-paneli-administratora.html

> Что касается логинов администратора с нижним подчеркиванием, можно было не расписывать все пункты ваших действий.
> А, просто попросить добавить возможность использования некоторых символов.
> И все.
- Я просто указал несоответствие между возможным именем пользователя, созданным администратором, и его проверкой на входе.

> Описанные баги не влияют на нормальную работу системы.
- Но вызывают недовольство у админов...

> PS:
> Для постоянных пользователей. Прошу, извинить за редкое появление.
> 1. Много текущей работы.
> 2. Надо же дать возможность и самим пользователям решать некоторые проблемы. А то, все сидят и ждут когда придет Neon, и все исправит, и разрешит все вопросы.
- Не так-то просто отследить последовательность выполнения PHP в условиях действия JS. Например, формирование титульной страницы происходит с использованием целой кучи JS:
- Danneo CMS (ios.js, jquery.js, jquery.colorbox.js, jquery.liquid.slider.js, script.js, watch.js) - 6 шт.;
- форум Danneo CMS (bootstrap.min.js, highlight.pack.js, jquery.min.js, menu.js, script.js, theme.js, watch.js) - 7 шт.
Честно говоря, сам по себе язык PHP - это по сути шаблонизатор (препроцессор гипертекста) с расширенными возможностями. К чему его насыщать таким количеством JS, снижая общий уровень безопасности сайта и его гостей? Ну, разве что для мнимой экономии времени на разработку! Будет немного свободного времени - поклацайте по кнопке "Next" и посмотрите возможности HTML5/CSS3:
https://www.w3schools.com/css/

7
Предложения / Косметические баги в Danneo
« : 07 Октября 2017, 23:40:45 »
Все веблинки примеров соответствуют встроенным демо на локальном хостинге.

1. Мод "Главная" имеет автономное внутреннее имя "home", но при попытке вызвать его с этим именем по аналогии с другими модами в адресной строке браузера
http://localhost/home/
появляется сообщение об ошибке:
404
Запрашиваемой Вами страницы не существует!
Возможно, она была удалена или перемещена в другую категорию.

Однако вызов мода "Главная" по имени "home" позволит автоматически исключить баг в отображении меню (см. п.3).

2. Мод "Страницы" также имеет автономное внутреннее имя "pages", но при попытке вызвать его с этим именем в адресной строке браузера по аналогии с другими модами
http://localhost/pages/
появляется сообщение об ошибке:
404
Запрашиваемой Вами страницы не существует!
Возможно, она была удалена или перемещена в другую категорию.

Однако в настройках мода "Страницы"
Управление контентом >> Страницы >> Настройки
прямо указано, что он должен выводиться на экран в формате:
* Количество на страницу 10
* Количество столбцов 2

При этом прямая адресация демостраниц функционирует нормально
http://localhost/company

3. Меню позволяет создавать категории. Попробуем это сделать на примере верхнего меню
Управление системой >> Управление меню >> Все позиции >> Верхнее меню >> Все ссылки
По умолчанию там уже присутствует пункт "Главная" с пустым полем "Ссылка"
Управление системой >> Управление меню >> Все позиции >> Верхнее меню >> Все ссылки >> Редактировать ссылку Главная
По идее категория меню также должна иметь пустое поле "Ссылка". Поэтому я создаю пункт меню "Разделы" в виде категории с пустым полем "Ссылка", куда я потом хочу включить подпункты меню. Но что я имею в результате? В результате на экране я имею два одновременно выделенных цветом пункта верхнего меню: "Главная" и "Разделы". Следовательно, надо что-то решать в отношении их отличия. Попробовал задать пункту "Главная" адрес
http://localhost
Никакого эффекта это не дало. Здравый смысл подсказывает, что пустое поле "Ссылка" не должно адресовать на "Главную". И вот здесь стоит вспомнить имя модуля "Главная страница", о котором упоминалось в п.1, т.е. пункт "Главная" в меню должен иметь адрес
http://localhost/home/
Это позволит избежать подобных косметических казусов.

4. Большое неудобство в "Управлении меню" вызывает необходимость использовать символ "/" в поле "Ссылка". Для конечного пользователя гораздо проще указать в этом поле идентификационное имя страницы без дополнительных символов, а движок CMS должен сам решить вопрос его отображения в адресной строке браузера. Например, я внес в поле "Ссылка" условное имя статьи "surrogat", которая на сайте числится в категории с именем "offtop". В результате движок должен сформировать полный адрес статьи
http://localhost/articles/offtop/surrogat
А сама категория статей должна выглядеть так
http://localhost/articles/offtop/

8
Более подробно исследовал проблему и пришел к следующим выводам.

Баг №1 (пример на локальном хосте)

1. Входим в админпанель:
http://localhost/admin/

2. Движемся по маршруту:
Управление контентом >> Пользователи >> Добавить пользователя

3. Заполняем поля:
- Логин     Foma_BU
- E-Mail    foma@bu.ru
- Пароль    1234567890
- Группа     Публикатор
- Действие   Просто добавить

4. Кликаем по кнопке "Добавить".

5. В открывшемся окне "Список пользователей" кликаем по изображению "Редактировать" в строке пользователя Foma_BU.

6. В открывшемся окне "Редактировать пользователя" возле поля "День рождения" наблюдаем пары сообщений:
- 31 раз
Warning: Illegal string offset 'd' in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 661
Notice: Uninitialized string offset: 0 in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 661

- 12 раз
Warning: Illegal string offset 'm' in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 666
Notice: Uninitialized string offset: 0 in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 666

- около 100 раз
Warning: Illegal string offset 'y' in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 674
Notice: Uninitialized string offset: 0 in C:\usbwebserver\root\public_html\admin\mod\user\index.php on line 674


7. Кликаем кнопку "Сохранить".

8. В открывшемся окне "Список пользователей" опять кликаем по изображению "Редактировать" в строке пользователя Foma_BU.

9. В открывшемся окне "Редактировать пользователя" возле поля "День рождения" сообщения уже не наблюдаются.

10. Выходим из админпанели.

Вывод №1:
В файле
admin/mod/user/index.php
виноват вот этот кусочек кода:
						if ($item['fieldtype'] == 'date')
{
$sel = ' <select name="'.$name.'[day]">';
for ($i = 1; $i < 32; $i ++) {
$sel.= ' <option value="'.$i.'"'.(($value['d'] == $i) ? ' selected' : '').'>'.$i.'</option>';
}
$sel.=   ' </select>&nbsp;'
.' <select name="'.$name.'[month]">';
for ($i = 1; $i < 13; $i ++) {
$sel.= ' <option value="'.$i.'"'.(($value['m'] == $i) ? ' selected' : '').'>'.$i.'</option>';
}
$sel.=   ' </select>&nbsp;'
.' <select name="'.$name.'[year]">';
for($i = 1928; $i < (NEWYEAR + 1); $i ++)
{
if (empty($value) AND $i == 1971)
$sel.= ' <option value="'.$i.'" selected>'.$i.'</option>';
elseif ($i == $value['y'])
$sel.= ' <option value="'.$i.'" selected>'.$i.'</option>';
else
$sel.= ' <option value="'.$i.'">'.$i.'</option>';
}
$sel.= ' </select>';
echo $sel;
}
При редактировании профиля сразу после добавления пользователя, видимо, не определены переменные:
$value['d']
$value['m']
$value['y']

Баг №2 (пример на локальном хосте)

1. В предыдущем примере мы смогли создать пользователя с недопустимым именем Foma_BU.

2. Пытаемся войти в юзерпанель:
http://localhost/user/
с логином Foma_BU и паролем 1234567890

3. В ответ получаем сообщение:
Найдена ошибка!
Возможные причины:
Ваше имя должно быть не менее 3 и не более 18 символов!
Ваше имя должно состоять только из букв и цифр, без пробелов и любых спецсимволов.


Вывод №2:
В процессе разработки Danneo CMS была допущена оплошность:
созданы параллельные ветви алгоритмов обработки информации для админов и прочих пользователей.
Придется либо до конца версии править коды параллельно для скриптов админов и для скриптов прочих пользователей, либо ввести админов в состав модуля "Пользователи", который должен стать неотъемной частью базы движка, как это сделано во всех приличных CMS.

9
>> Куда вы пытаетесь зайти созданным пользователем?
- Через блок входа пользователей. На локальном хостинге это выглядит так:
http://localhost/user/login

>> Пользователи заходят на сайт
- Именно туда я и хотел войти под именем публикатора.

>> Чтобы зайти в Админку нужно создавать Администратора.
- Администратор создается во время инсталляции. Зачем мне создавать на локальном хостинге кучу администраторов?

>> Есть список символов запрещенный в имени пользователя, среди них по умолчанию пробелы и знаки подчеркивания.
- Первый баг и заключается в том, что Администратор может создать Пользователя с любым именем, включая запрещенные символы. А Пользователь с этим именем войти через блок пользователей не может, потому что выдается предупреждение. Почему предупреждение о символах имени не выдается Администратору при создании нового пользователя?

>> По поводу ошибок пользователя на уровне дня рождения ничего сейчас не скажу, надо проверить, но есть подозрение что либо файлы cms заливались не в бинарном режиме либо что-то делаете не так.
- Все очень просто: заходите под именем Администратора, создаете нового пользователя и пытаетесь редактировать его профиль. Что тут неясно?

>> По поводу форума, что ен утраивает с форумами интеграция которых уже реализованна? хотя бы тем же Simple Machines?
- Автор FUDforum может оказать помощь при создании мода встроенного форума для Danneo CMS!!!

10
Не теряю надежды включить Danneo CMS в учебный процесс средней школы, потому что она прекрасно приспособлена для работы на "тихоходных" бюджетных серверах, где обновление страниц в режиме администрирования для "вебмонстров" типа Drupal CMS 8.3.x занимает от нескольких десятков секунд до нескольких минут при наличии всевозможных видов "кеширования", без которых сама инсталляция длится более 1 часа. Поэтому у меня появилось несколько пунктов к разработчику по поводу Danneo CMS 1.5.4 с патчами 1-3.

1. Баги администрирования пользователей.
Моя последовательность действий.
Под учетной записью админа вошел в панель управления.
Создал пользователя "Foma_BU" ("Фома без ума") с правами публикатора.
Вышел из учетной записи админа.
Попытался войти под учетной записью пользователя "Foma_BU" и получил отказ:

Найдена ошибка!
Возможные причины:
Ваше имя должно быть не менее 3 и не более 18 символов!
Ваше имя должно состоять только из букв и цифр, без пробелов и любых спецсимволов.


Снова под учетной записью админа вошел в панель управления.
Удалил пользователя "Foma_BU" и создал нового "FomaBU".
Вошел в редактирование указанного пользователя и на уровне поля "День рождения" получил кучу двустрочных сообщений об ошибке:

Warning: Illegal string offset 'd' in admin\mod\user\index.php on line 661
Notice: Uninitialized string offset: 0 in admin\mod\user\index.php on line 661
...


2. В установочном пакете Danneo CMS присутствует редактор TinyMCE, но статьи и другие текстовые документы демоконтента опубликованы без его участия. В процессе их редактирования редактор TinyMCE также невозможно подключить.

3. Мне удалось найти приличную CMS форума, автор которой готов оказать помощь по ее интеграции в Danneo CMS. Это FUDforum. Вот все необходимые для ознакомления и связи с автором веблинки:
- продукт
_http://fudforum.org/

11
Присоединитесь к празднованию 25-ой годовщины Интернет Сообщества (ISOC):
_https://www.internetsociety.org/community-forum-15-june-2017

12
И опять я согласен с Вами. Видимо употребляем одни и те же напитки...

У меня пока есть 2 пожелания.
1. Хочется в будущем форуме иметь разделы и минимум 3 уровня вложенности категорий для тем в каждом разделе, а также возможность задавать количество выводимых на странице сообщений в теме по каждому разделу или еще лучше по каждой категории автономно. Это связано с особенностями применения на форуме наглядных материалов.
2. Предусмотреть возможность формирования и хранение информации многоязычных сообщений (реализовать многоязычность) с помощью кодов интернационализации (ISO 639-1, ISO 639-2, ISO 639-3):
https://en.wikipedia.org/wiki/Language_code
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
https://en.wikipedia.org/wiki/ISO_639-3
Например, запись с помощью BB-кодов типа
"Danneo CMS - [en]the best in the world content management system[/en][ru]лучшая в мире система управления контентом[/ru]"
будет воспроизводиться как
"Danneo CMS - the best in the world content management system"
при выборе английского языка и как
"Danneo CMS - лучшая в мире система управления контентом"
при выборе русского языка. При этом следует обязательно учесть язык сайта по умолчанию, если будет отсутствовать перевод на языке посетителя сайта.
Это позволит не плодить поля таблиц БД для каждого языка и в то же время полноценно пользоваться многоязычностью.
Потерь производительности по п.2 вроде бы не должно быть, но окончательное слово за Вами.

13
Возможно, но все равно, его связь с WP слишком очевидна, и идейная и техническая (использование функций WP напрямую).
Согласен с Вами, "своя ряса не нарушит этикет в своем монастыре"! Но какие могут быть последствия? Об этом чуть ниже...

Если уж, и делать встроенный форум для DN, то свой, использующий ядро системы. Собственно, для большинства представительских сайтов, и не требуется мощный и сложный форум. Достаточно, общения по принципу комментариев.
Имеющихся в DN классов и функций явно недостаточно для создания даже самого примитивного форума класса BB (доска объявлений). Можете проверить сами. Вот здесь можно скачать MyBBIntegrator
http://phpdave.com/MyBBIntegrator/Download
https://github.com/olada/MyBBIntegrator
Он необходим для полной интеграции форума MyBB
http://mybb.com/
в любую CMS пользователя и содержит все необходимые классы и функции в одном файле "class.MyBBIntegrator.php" объемом более 100 кбайт.
А теперь попробуйте ответить на вопрос: какие классы и функции этого форума уже реализованы в DN?
Функционал практически любой бесплатной форумной CMS уровня MyBB, phpBB или SMF позволяет создать полноценный портал c дополнительными изюминками типа звуковая капча, игровой раздел, чат и т.п. Например, здесь
http://www.tinyportal.net/
можно посмотреть портал TinyPortal на базе функционала форумного движка SMF. При этом количество дополнительных скриптов для создания портала на базе SMF по объему не превышает 21 % от объема скриптов самого форума. Отсюда делаем неутешительный прогноз: объем скриптов "приличного" форума для DN может в 5 раз превышать объем скриптов самой DN!

У нас уже были попытки разработки такого форума. Еще на старом форуме, для предыдущей ветки Danneo CMS. Но, к сожалению, ребята хотели видеть его платным. Что, разумеется не соответствует духу свободно распространяемого ПО. Пришлось расстаться.
Видел я тот форум, который был настолько интегрирован в DN версии 0.5.4, что его не смог бы отделить самый искуссный "хирург" от программирования.

Если, найдутся желающие разрабатывать и поддерживать модуль форума для Danneo CMS, будем только приветствовать. А пока, можно использовать имеющуюся интеграцию с форумами.
Думается, что нет необходимости вновь "изобретать велосипед", ведь чем больше объем скриптов, тем выше вероятность появления уязвимостей в кодах. Лучше сделать надежный универсальный интегратор типа мост (bridge) для существующих бесплатных форумных движков по типу "SMF-Mambo"
http://download.simplemachines.org/?bridges
или создать "Danneo-Proxy" по типу "Vanilla ProxyConnect"
https://open.vanillaforums.com/discussion/12933/proxyconnect-1-8-released
https://github.com/real-chocopanda/Proxyconnect
В качестве базовой бесплатной CMS форума можно взять SMF, которая удовлетворит любого корпоративного клиента и не только.
Не буду рекомендовать MyBB и phpBB.
У MyBB всегда проблемы с темами и переводом на русский язык.
А phpBB, вероятно, загнется в ближайшее время, если не изменит политику развития. В частности, это связано с применением в составе CMS исполняемых в OS Windows файлов типа EXE в качестве "Symfony Console Component":
- phpBB 3.1.x
/vendor/symfony/console/Symfony/Component/Console/Resources/bin/hiddeninput.exe
- phpBB 3.2.x
/vendor/symfony/console/Resources/bin/hiddeninput.exe

Symfony Console Component
The Console component eases the creation of beautiful and testable command line interfaces.
Resources/bin/hiddeninput.exe is a third party binary provided within this component. Find sources and license at

https://github.com/symfony/console
https://github.com/Seldaek/hidden-input

Указанный файл включает скрытые программные коды (hidden source codes), инфицирование которых невозможно контролировать визуально. Это может привести к заражению компьютеров с OS Windows
http://newsrbk.ru/news/4478098-virus-vyimogatel-rasprostranilsya-na-150-stran-postradali-bolee-100-tyisyach-organizaciy.html
в случае их подключения к форуму на базе phpBB.

С прочими проблемами DN можно ознакомиться в дискуссии "Danneo CMS - что не так?"
http://searchengines.guru/showthread.php?t=722033

14
Приведу Вам немного истории. Для справки: префиксы "BB" и "B2" означают одно и то же. Первоначально форум "BB" создавался для "B2 CMS", из которой возникли современные "B2Evolution"
http://b2evolution.net/
и "WordPress"
http://ru.wordpress.org/
BBPress версии 0.9.0.7(4207) - это абсолютно автономный форум. Все необходимое находится в папке "support" по адресу
https://github.com/zenphoto/Website
включая "wp-ajax-js.php", "wp-classes.php" и "wp-functions.php".
Вы можете просто установить его у себя на локальном сервере без WP, и он будет работать полностью автономно. К тому же BBPress абсолютно бесплатный.

15
Danneo CMS по праву относится к классу порталов, но по умолчанию в ее установочном пакете присутствует лишь папка "forum" с HTML заглушкой в виде файла "index.html" нулевого размера. Такое положение вещей слегка охлаждает пыл желающих внедрять Danneo CMS. Особенно у корпоративных клиентов влияет боязнь нарушения интеграции "внешнего" форума после его очередного обновления. Хорошим выходом из создавшейся ситуации может стать поставка Danneo CMS со "встроенным" ("built-in") форумом, который при необходимости может быть заменен на "внешний" форум простым удалением "встроенного". Наиболее подходящим вариантом "встроенного" форума, на мой взгляд, может стать bbPress (http://bbpress.org/), который изначально создавался как для "автономного" применения, так и для "встроенного" с минимальными затратами на полную интеграцию. Имеется наглядный пример на сайте ZenPhoto (http://www.zenphoto.org/support/) с пакетом для установки в папке "support" (https://github.com/zenphoto/Website), которую легко можно переименовать в "forum". Тонкости установки можно посмотреть в файле
support\bb-admin\install.php

Страницы: [1] 2