Skip to content

Instantly share code, notes, and snippets.

@AgelxNash
Last active February 8, 2022 03:39
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save AgelxNash/9239062 to your computer and use it in GitHub Desktop.
Save AgelxNash/9239062 to your computer and use it in GitHub Desktop.
[MODX Evolution] Плагин загрузки элементов (чанков и сниппетов) из файлов
<?php
/**
* LoadElement
*
* Загрузка элементов из файлов
*
* @version 2.0.0
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
* @category plugin
* @author Agel Nash <modx@agel-nash.ru>
* @internal @legacy_names LoadElement
* @internal @properties &extChunk=Расширения чанков (<i>через запятую</i>);input;txt,html &extSnippet=Расширения сниппетов (<i>через запятую</i>);input;php &pathElement=Папка с элементами (<i>относительно корня сайта</i>);input;assets/element/ &namespace=В какой Namespace загружать элеменыт;input;custom
* @internal @modx_category API
* @internal @events OnWebPageInit,OnManagerPageInit,OnPageNotFound
*/
if (!defined('MODX_BASE_PATH')) { die('HACK???'); }
if(!isset($namespace)) {
$namespace = 'custom';
}
$extChunk = (!empty($extChunk) && is_scalar($extChunk)) ? $extChunk : 'txt,html';
$extChunk = array_map('trim', explode(",", $extChunk));
$found = $modx->findElements('chunk', MODX_BASE_PATH . $pathElement . '/chunk/', $extChunk);
foreach ($found as $name => $code) {
$modx->addChunk($name, $code, $namespace . '#');
}
$extSnippet = (!empty($extSnippet) && is_scalar($extSnippet)) ? $extSnippet : 'txt,html';
$extSnippet = array_map('trim', explode(",", $extSnippet));
$found = $modx->findElements('snippet', MODX_BASE_PATH . $pathElement . '/snippet/', $extSnippet);
foreach ($found as $name => $code) {
$modx->addSnippet($name, $code, $namespace . '#');
}
@atomoc
Copy link

atomoc commented Jun 2, 2015

Не работает, в отличие от 0.2 версии. У меня возникла идея обновить до 0.3 из-за отображения пустого экрана на неопубликованных ресурсах, вместо ошибки 404, строки:

$path = str_replace(self::getPath('snippet'), '', $item->getPath().'/');
if(!empty($path)){
    $snippetName = str_replace("/", "\\", $path) . $snippetName;
}

должны это исправить?

@atomoc
Copy link

atomoc commented Jun 2, 2015

Вряд ли, потому как даже:

class LoadElement{
}

способствует выводу белого экрана.

@atomoc
Copy link

atomoc commented Jun 2, 2015

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

@MrSwed
Copy link

MrSwed commented May 16, 2016

@AgelxNash
L62
$modx->snippetCache[$snippetName . "Props"] = array();
В новых реализациях modx, snippet properties, только как строка и больше не проверяется на пустоту.
modxcms/evolution@e0ffb3e#commitcomment-17488835

@Deesen
Copy link

Deesen commented Mar 1, 2017

I had to replace all '/' by DIRECTORY_SEPARATOR for windows-compatibilty.

@atomoc
Copy link

atomoc commented May 22, 2017

Евгений, скажи, в начале каждого сниппета нужно указывать:

if ( !defined('MODX_BASE_PATH') ) die('HACK???');

я правильно понимаю? На сколько было бы критично пренебречь этим правилом?

@AntonFix
Copy link

Это еще работает?

@AgelxNash
Copy link
Author

@AntonFix Да, работает. Обновил код который работает еще и с версии 1.4.4

@AgelxNash
Copy link
Author

@atomoc Есть ситуации, когда можно принебречь. Но если не в даваться в подробности, то лучше не стоит.

@AgelxNash
Copy link
Author

@Deesen See the new version

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment