Чтение RSS каналов

Форум

Открыть Ответить

Новые функции CMS и их производительность относительно версий PHP

21
13.01.2018 11:16:0913.01.2018 11:16:55
И еще один момент. добавь в тест вот это:
$txt = "hi all, I said hello";
// test strtr
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello", "saider" => "babah");
echo "strtr: ".strtr($txt, $trans)."<br>";
// test str_replace
$trans_in = array("h", "hello", "hi", "saider");
$trans_out = array("-", "hi", "hello", "babah");
echo "str_replace: ".str_replace($trans_in, $trans_out, $txt)."<br>";


Обратите внимание на приоритет замен в strtr ("h" не используется, так как существуют более длинные совпадения) и как замененный текст больше не участвует в поиске. А вот str_replace делает замену по очереди в соответствии с ключем массивов.

Оно тебе надо? ))

Здесь молодость бродит крылато, и старость не клонит голов.
4.2

4.2
22
13.01.2018 11:26:02
А вот еще очень интересный пример, где str_replace заменяет все до посинения ))
http://php.net/manual/ru/function.strtr.php#117169
Т.е. эта функция производит замену многократно (замену в замене при обнаружении совпадения даже после замены), когда strtr делает замену только один раз и больше к этой строке не возвращается.

$strTemplate = "My name is :name, not :name2.";
$strParams = [
  ':name' => 'Dave',
  'Dave' => ':name2 or :password', // a wrench in the otherwise sensible input
  ':name2' => 'Steve',
  ':pass' => '7hf2348', // sensitive data that maybe shouldn't be here
];

echo strtr($strTemplate, $strParams);
// "My name is Dave, not Steve."

echo str_replace(array_keys($strParams), array_values($strParams), $strTemplate);
// "My name is Steve or 7hf2348word, not Steve or 7hf2348word2."

Здесь молодость бродит крылато, и старость не клонит голов.
4.2

4.2
23
13.01.2018 14:48:56
В будущем планирую создать отдел, по типу как это реализовано на php.net, с детальным описанием функций CMS и примеров их применения. Так же будет предложена возможность комментирования и обсуждения. Думаю что подобный функционал будет полезен как для начинающих, так и для опытных веб разработчиков.

О сколько нам открытий чудных,
Готовит просвещенья дух,
И опыт, сын ошибок трудных,
И гений, парадоксов друг...
3.24

3.24
24
16.01.2018 11:16:31
Под итог лучше и привычнее использовать str_replace.

Только надо попробовать в переменной в выводимом тексте добавить имена переменных как в шаблоне. Заменит он их или нет? по идее должен. А значит, надо их htmlspecialchar`ом выводить...

Здесь молодость бродит крылато, и старость не клонит голов.
4.2

4.2
25
16.01.2018 17:35:5316.01.2018 20:57:12

Под итог лучше и привычнее использовать str_replace

Функция str_replace используется в системе изначально, с тех времён когда ещё многие другие CMS активно юзали ereg_replace Смайл - 13

Предполагал что strtr будет работать быстрее, потому как на основании документации PHP, она именно для этих целей и создана, работает с двумя аргументами массива типа: array('{%login%}' => $cont, '{%theme%}' => $theme); без каких либо манипуляций.

В отличии от функции: str_replace, в которой потребуется определить ключи array_keys($value) и их значения array_values($value). Что самое интересное, даже в этом варианте: str_replace(array_keys($value), array_values($value), $sub) по результатам сравнительного тестирования, данный метод оказывается быстрее.

Только надо попробовать в переменной в выводимом тексте добавить имена переменных как в шаблоне. Заменит он их или нет?

На проекте уже как несколько недель используется этот метод Смайл - 13 На данный момент лучшей альтернативы ещё не придумали.

А значит, надо их htmlspecialchar`ом выводить...

Непонятен смысл использования. Поломать все HTML шаблоны?

Предлагаю на обозрение, одна из новых функций шаблонизатора с внутренним кешированием. Принимает массив с переменными для замены из вне функции, так же возможно добавление внутри метода.
function setTemplateBasic($tpl, $val = '') {
	global $theme, $conf;
	static $argc, $cach, $cont;
	if ($argc != $tpl || !isset($cach)) {
		$argc = $tpl;
		$cont = getThemeFile($argc);
		if ($cont) $cach = file_get_contents($cont);
	}
	if ($cont) {
		$value = array('{%theme%}' => $theme);
		$value = is_array($val) ? array_merge($value, $val) : $value;
		return str_replace(array_keys($value), array_values($value), $cach);
	} else {
		return setTemplateWarning('warn', array('time' => '', 'url' => '', 'id' => 'warn', 'text' => sprintf(_ERRORTPL, $tpl)));
	}
}

О сколько нам открытий чудных,
Готовит просвещенья дух,
И опыт, сын ошибок трудных,
И гений, парадоксов друг...
3.24

3.24
26
16.01.2018 22:19:2718.01.2018 07:04:14
Не, шаблоны тут не при чем. именно то, что будет выводиться вместо {%var%} выводить через htmlspecialchar - что бы после замены еще раз уже в выводимом значении {%var%} не поменялась на тоже выводимое значение. Хотя тут бесконечный цикл получается какой то. Или, как я понял из примера выше, это работает, если есть похожий следующий ключ. (это в прмере про :name и Dave)


Сервер: Сервер в интернете

Здесь молодость бродит крылато, и старость не клонит голов.
4.2

4.2
27
17.01.2018 17:45:5717.01.2018 17:54:02

как я понял из примера выше, это работает, если есть похожий следующий ключ. (это в прмере про :name и Save)

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

Причиной тому уникальные переменные, так называемые "мини шаблоны" типа: {%theme%}. В нашем случае это ключ, который, как правило, в массиве указан только один раз. Именно для этих целей, для создания уникальности в них используются нестандартные символы, не применяемые в такой последовательности, в стандарте HTML5, а именно открывающая {% и закрывающая %}.

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

О сколько нам открытий чудных,
Готовит просвещенья дух,
И опыт, сын ошибок трудных,
И гений, парадоксов друг...
3.24

3.24
28
07.02.2018 11:51:51
Вижу в head все файлы css и js выводятся как бы в одном (объединенном) виде.
Вопрос - через что делается объединение?
Что-то самописное или есть готовое решение?
Как раз сейчас тоже занялся этим вопросом, потому и обратил внимание.

Если что, я про это:
<link rel="stylesheet" href="index.php?go=css">
<script src="index.php?go=script"></script>

Здесь молодость бродит крылато, и старость не клонит голов.
4.2

4.2
29
07.02.2018 20:39:2607.02.2018 20:47:07
Производится поиск стилей и скриптов, делается их объедение в один файл (отдельно для скриптов и для стилей). В зависимости от настроек, система сама оптимизирует и сокращает код, при необходимости кеширует, с последующем выводом, передачей файла браузеру. Это одна из специально разработанных новых функций пакета модификаций CMS версии 6.3.

Немного забегая вперёд, представляю вашему вниманию один из новых отделов оптимизации CMS с соответствующими возможностями.

Отдел оптимизации CMS

Если всё будет идти по плану, то первый релиз Alfa/Beta версии 6.3 Pro можно будет протестировать уже через две, три недели.

P.S.: Иногда бывает полезно посмотреть исходный код страниц сайта, можно узнать много интересного Смайл - 13 Считаю что здоровое любопытство, должно быть неотъемлемым качеством веб разработчика, который в свою очередь, должен находится в вечном поиске чего-то нового и интересного Смайл - 17

О сколько нам открытий чудных,
Готовит просвещенья дух,
И опыт, сын ошибок трудных,
И гений, парадоксов друг...
3.24

3.24
30
07.02.2018 22:08:24
Сегодня как раз тоже начал писать подобный функционал.
Интересно было как у тебя реализован поиск скриптов и стилей.

Я для стилей иду немного в том же направлении, но и немного более универсально хочу построить функцию.
Функция будет брать указанный стиль (берем наш стиль темы). Считываем содержимое. Смотрим наличие инклюдов. Выдираем названия файлов. очищаем файл стилей от инклюдов. Берем имена файлов в инклюдах - снова считываем, проверяем на наличие инклюдов и т.д. Вобщем - пишу рекурсивную функцию.
Достаточно указать файл стиля - и все важные стили автоматически будут подтянуты. Остается решить вопрос с путями к изображениям в стилях. но, думается, что-то придумаю.
Весь полученный набор стилей чистим от переносов и табуляций. Загоняем в кеш. Дальше будет система как с автоматическим копированием БД., только тут будут стили обновляться. ну или в админке запилить кнопку принудительного обновления сжатого файла стилей. (опять же на подобие модуля БД).

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

Кстати, чем сжимается JS? там чет черт ногу сломит после функций slaed...

PS
не говоря уж про комментарии разработчиков в коде. Это даже весело порой ))

Здесь молодость бродит крылато, и старость не клонит голов.
4.2

4.2
Открыть Ответить
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь