Готовый пример Sitemap с использованием сниппета pdoSitemap. Также это пример процессора, который мы запускаем через роутинг. Пример запуска роутинга:
https://api.litosh-web.ru/?action=sitemap/index
core/components/ajax/processors/web/sitemap/index.class.php
<?php
require_once MODX_CORE_PATH . 'model/modx/modprocessor.class.php';
class IndexSitemapAjax extends modProcessor
{
public $objectType = 'modResource';
public $classKey = 'modResource';
public function process()
{
$output = $this->modx->runSnippet('pdoSitemap', [
'forceXML' => false
]);
return $output;
}
}
return 'IndexSitemapAjax';
Проблемы:
Следующим этапом будет создание точки входа api для будущего бэкенд приложения. Поскольку я делаю это через свой компонент, то адрес в данном случае будет не в корне проекта.
assets/components/ajax/action.php
<?php
header('Content-Type: application/json; charset=utf-8');
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$properties = array();
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
//check autoPublish
$modx->cacheManager->autoPublish();
$ajax = $modx->getService('ajax', 'ajax', $modx->getOption('ajax_core_path', null,
$modx->getOption('core_path') . 'components/ajax/') . 'model/', $properties
);
$path = MODX_CORE_PATH . 'components/ajax/processors/web/';
$response = $modx->runProcessor($_REQUEST['action'], $_REQUEST, array(
'processors_path' => $path
));
if (is_array($response->response)) {
$json = $modx->toJSON($response->response);
}
else {
$json = $response->response;
}
echo $json;
@session_write_close();
exit();
Для перестройки проекта и создания точек входа, я создал два поддоммена. Один для админки mgr, другой для api. И заменил содержимое index.php файла в корне проекта на следующее:
index.php
<?php
$arr = explode('.', $_SERVER['HTTP_HOST']);
$subdomain = $arr[0];
switch ($subdomain) {
case 'mgr':
require_once dirname(__FILE__) . '/manager/index.php';
break;
case 'api':
header('Access-Control-Allow-Origin: *');
require_once dirname(__FILE__) . '/assets/components/ajax/action.php';
break;
}
return true;
Api точку можно написать по сути в любом месте, но я решил сделать это в данном случае, через создание своего компонента.
Также саму админку можно запустить не на поддомене, а на любом порту, тогда не придется много чего прописывать дополнительно. Но для удобства, можно сделать, как я.
Как вы вероятно уже заметили, сайт перешел на библиотеку React под названием NEXT JS 🆕. Он успешно прошел индексацию поисковыми системами благодаря SSR (серверному рендерингу). Сайт все еще остается на версии MODx 2.8.* и пока не планирует переезжать даже на 3-ю версию.
Как только появляется новая технология, все внезапно говорят, что старую технологию уже никто не использует. Например, Jquery. Но это далеко не так. Наверное, не более 10% из всего мира 🌎 на данный момент используют эту новую библиотеку (React). Мое предположение, что еще минимум 10 лет Jquery будет всё так же актуален. На Jquery можно сделать все тоже самое, что и на React. Просто React, действительно, процентов на 30% удобнее и быстрее 👍. Но, чтобы получить это удобство, нужно потратить немало времени на изучение этой новой технологии, перестроить не только свой мозг, но и большинство CMS систем, поскольку подход очень разный (с тем, что было) 😞. Короче, проблемы с переходом не уменьшаться, а наоборот - увеличатся в разы 📉. Тоже самое и с поддержкой сайтов. А волшебной библиотеки 💊, которая сделает всё за тебя - не было и не будет ⛔. Также и вскрики по поводу PHP. Какая разница на каком языке работает сайт?... Не нравится мне этот агрессивный маркетинг и снобизм, который присутствует в программировании 😕
Быстро перейти на новую технологию могут только передовые компании и приближенные к ним, но они и берут соответственно за свои проекты 🤑. В остальном же, массовый переход на новую технологию будет двигаться очень медленно и неохотно 🐢.
composer require mobiledetect/mobiledetectlib
<?php
require_once MODX_CORE_PATH . '/vendor/autoload.php';
$detect = new \Detection\MobileDetect;
$deviceType = ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' : 'phone') : 'computer');
if ($input == $deviceType) {
return true;
}
{if 'phone' | detectMobile}
The phone detected
{else}
{/if}
Рад сообщить, что впервые мой компонент (и кстати самый незаменимый) StaticFiles, теперь доступен в репозитории modx.com 😎
Данный слайдер имеет следующие поля: Название, Описание, Ссылка, Изображение.
Благодаря этому видео, у меня получилось создать React приложение в админке MODx под названием msWidgets. Но не без проблем. Сейчас расскажу как.
В этом разделе собран интересный материал по MODx Revolution — новейшей системе управления сайтами на базе MODx. Она многофункциональная: на данной платформе можно создавать и дорабатывать лендинги, интернет-магазины и другие сайты. MODx Revolution — прогрессивная, очень удобная, в полной мере соответствующая вызовам времени.
На своём блоге я постоянно выкладываю статьи по этой системе. MODx Revolution активно развивается, её поддерживает мощная команда разработки. И я делюсь теми фишками, которые нашёл и протестировал.