Vitaliy
Vitaliy
поки що все мимо
Maxa
if (!is_object($modx)) {
die('MODX object not available');
}
$modx->db->connect();
if (empty($modx->config)) {
$modx->getSettings();
}
$modx->invokeEvent("OnWebPageInit");
Maxa
$modx->invokeEvent("OnWebPageInit");
це по ланцюжку запустить плагіни, і bLang передасть шлях до класу lang_content
без цього DocLister не знаходить lang_content і повертає "";
Volodymyr: Якщо це blang, то цей контроллер підвантажується плагіном
Vitaliy
Volodymyr
Volodymyr
з останнього пам`ятаю цю статтю, для підключення $modx в сторонній файл
https://modx.evo.im/blog/triks/2103.html
може на поточний момент бути не актуальною
Volodymyr
актуальний приклад, думаю можна в якомусь модулі, де є ajax запити знайти
Maxa
та все працює.
ось ваш код з виправленнями
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
define('MODX_API_MODE', true);
require_once('index.php'); //require_once('/index.php');
if (!is_object($modx)) {
die('MODX object not available');
}
$modx->db->connect();
if (empty($modx->config)) {
$modx->getSettings();
}
$modx->invokeEvent("OnWebPageInit");
echo '<?xml version="1.0" encoding="windows-1251"?>' . PHP_EOL;
echo '<root>' . PHP_EOL;
echo $modx->runSnippet('DocLister', array(
'controller' => 'lang_content',
'id' => 'tovars',
'tpl' => 'blogTPL',
'tvList' => 'block-img',
'depth' => 0,
'orderBy' => 'menuindex ASC',
'display' => 20,
'ownerTPL' => '@CODE: <div class="products__list grid-view">[+dl.wrap+]</div>',
'idType' => 'documents',
'documents' => '2',
'debug' => 1,
'cache' => 0
));
echo '</root>';
Vitaliy
думаю якийсь баг, так як сайт копіювався, буду перевстановлювати(
Artur
також порада - юзайте evo() замість $modx. там є перевірки, які спрощують дебаг, і не треба писати if (!is_object($modx)) {
die('MODX object not available');
}
Vitaliy
Artur
зробіть composer update в core, поставте xdebug та брекпойнт на початку, пройдіться з ним, велика вірогідність що спіймаєте десь помилку.
можливо десь не підтягується якийсь файл.
Artur
я б взагалі поклав поруч та додав би до команди salo цю опцію - генерувати з xdebug чи без.
Або через окремий докерфайл, який покласти поруч, або вбудувати xdebug в контейнер (створити окремий саме під Ево) та вмикати за потреби через параметр, що передасть mode.
𝓔𝓾𝓰𝓮𝓷𝓮
А я і думаю, що так тихо тут, а оно мене викинуло ))
Serhii
𝓔𝓾𝓰𝓮𝓷𝓮
Artur
https://anvaka.github.io/map-of-github/#11.19/24.8219/-15.6701 цікаву штуку зробили - граф пов'язаних репозиторіїв на Гітхабі. можна швидко подивитися, що є з невідомого по ModX/Evo, чи по Laravel
Serhii
Yevhenii
Всім привіт, який кращий спосіб згенерити сайтмап для сайту з sLang? Треба на одній сторінці вивести посилання на всі мовні версії всіх сторінок. Існуючі компоненти сайтмапів не підходять, а вручну @makeUrl знає лише поточну локаль
𝓔𝓾𝓰𝓮𝓷𝓮
𝓔𝓾𝓰𝓮𝓷𝓮
Спробуй так:
У контролері
public function setData()
{
$baseDomain = 'https://site.com/';
$languages = ['uk' => '', 'en' => 'en/', 'de' => 'de/'];
$docs = evo()->runSnippet('DocLister', [
'parents' => 0,
'depth' => 10,
'showParent' => 1,
'tpl' => '',
'api' => 1
]);
$sitemap = [];
foreach ($docs as $doc) {
$alias = $doc['alias'];
$entry = [
'url' => $baseDomain . $languages['uk'] . $alias,
'editedon' => date('c', $doc['editedon']),
'alternates' => []
];
foreach ($languages as $langCode => $prefix) {
$entry['alternates'][] = [
'lang' => $langCode,
'url' => $baseDomain . $prefix . $alias
];
}
$sitemap[] = $entry;
}
$this->data['sitemap'] = $sitemap;
}
𝓔𝓾𝓰𝓮𝓷𝓮
в самому блейд <?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
@foreach ($sitemap as $page)
<url>
<loc>{{ $page['url'] }}</loc>
@foreach ($page['alternates'] as $alt)
<xhtml:link rel="alternate" hreflang="{{ $alt['lang'] }}" href="{{ $alt['url'] }}" />
@endforeach
<lastmod>{{ $page['editedon'] }}</lastmod>
</url>
@endforeach
</urlset>
𝓔𝓾𝓰𝓮𝓷𝓮
можливо можно по іншому
Serhii
Yevhenii
Ого. Дякую всім
𝓔𝓾𝓰𝓮𝓷𝓮
Ого. Дякую всім
Там можливо треба не alias, тут тре дивитися сайт в тебе з .html чи ні? Який рівень вкладень?
Serhii
Serhii
Ого. Дякую всім
Чекайте, шось в коді мультимову не бачу. Походу тільки мультисайт завіз.
𝓔𝓾𝓰𝓮𝓷𝓮
Serhii
Але можна поколупати код. Та розібратись.
Serhii
𝓔𝓾𝓰𝓮𝓷𝓮
𝓔𝓾𝓰𝓮𝓷𝓮
public function setData()
{
$languages = ['uk', 'ru', 'en'];
$docs = evo()->runSnippet('DocLister', [
'parents' => 0,
'depth' => 10,
'showParent' => 1,
'tpl' => '',
'urlScheme' => 'full',
'api' => 1
]);
$sitemap = [];
foreach ($docs as $doc) {
$entry = [
'url' => $this->insertLangPrefix($doc['url'], 'uk'), // основна мова — uk
'editedon' => date('c', $doc['editedon']),
'alternates' => []
];
foreach ($languages as $lang) {
$entry['alternates'][] = [
'lang' => $lang,
'url' => $this->insertLangPrefix($doc['url'], $lang)
];
}
$sitemap[] = $entry;
}
$this->data['sitemap'] = $sitemap;
}
private function insertLangPrefix($url, $lang)
{
$parsed = parse_url($url);
$scheme = $parsed['scheme'] ?? 'https';
$host = $parsed['host'] ?? '';
$path = ltrim($parsed['path'] ?? '', '/');
// Вставляємо префікс мови, крім української
$prefix = $lang === 'uk' ? '' : $lang . '/';
return "{$scheme}://{$host}/{$prefix}{$path}";
} і потім так <?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
@foreach ($sitemap as $page)
<url>
<loc>{{ $page['url'] }}</loc>
@foreach ($page['alternates'] as $alt)
<xhtml:link rel="alternate" hreflang="{{ $alt['lang'] }}" href="{{ $alt['url'] }}" />
@endforeach
<lastmod>{{ $page['editedon'] }}</lastmod>
</url>
@endforeach
</urlset>
Serhii
Давно в мене мультимовних не було. Не пам'ятаю де робив. Але в sSeo буде.
𝓔𝓾𝓰𝓮𝓷𝓮
Так, це потрібна фішка, зараз ЦЕОшніки прямо кохають цей сайтмап, хоча по мені, повна фігня))
Serhii
Доречы мови з sLang отак можна отримати evo()->getConfig('s_lang_front') https://seiger.github.io/sLang/use-in-blade/
Serhii
Maxa
> ы 👀
Serhii
> ы 👀
Та дохріналіон мов на компі.
Serhii
Maxa
b| 😋
Serhii
𝓔𝓾𝓰𝓮𝓷𝓮
𝓔𝓾𝓰𝓮𝓷𝓮
Yevhenii
Вийшло?
Пробую ще, Вашим методом
𝓔𝓾𝓰𝓮𝓷𝓮
Напиши потім
𝓔𝓾𝓰𝓮𝓷𝓮
𝓔𝓾𝓰𝓮𝓷𝓮
Зараз гляну
Yevhenii
𝓔𝓾𝓰𝓮𝓷𝓮
Ні
Я мав на увазі гетконфіг та потім префікс підставити
𝓔𝓾𝓰𝓮𝓷𝓮
Трохи перероблю
З урахуванням sLang
𝓔𝓾𝓰𝓮𝓷𝓮
Там лише поточна мова
Зможешь показати (dd), як виводится інфа тут evo()->getConfig('s_lang_front');
Yevhenii
Ідеально було б отримати з контроллера урли для головної як тут у langSwitcher'і
Yevhenii
Повні урли
𝓔𝓾𝓰𝓮𝓷𝓮
Тоді ще краще
𝓔𝓾𝓰𝓮𝓷𝓮
Повні урли навіть на сторонці з другим та третім вкладанням?
Yevhenii
𝓔𝓾𝓰𝓮𝓷𝓮
А то я не туді зайшов
𝓔𝓾𝓰𝓮𝓷𝓮
@seigerit я так розумію з масиву, верхній це голона мова.
Так?
Serhii
Yevhenii
𝓔𝓾𝓰𝓮𝓷𝓮
Так. Типово вона без префіксу
Сергій
Зможемо темплейтєдітор3
Переробити на sTemplateEditor?)))
Я думаю тут багато людей котрі навіть задонатять на це)
Треба щоб воно працювало з sLang
Serhii
Serhii
Доречі готуйтесь, що адмінка та тайлвінд 4 переїде.
Serhii
Модулі вже переводжу.
Serhii
Та кидайте на загальну банку
Serhii
Доречі підкачало комьюніті. На обслуговування Ево було витрачено 7 000 грн, а накидали всього 2 000.
𝓔𝓾𝓰𝓮𝓷𝓮
𝓔𝓾𝓰𝓮𝓷𝓮
Serhii
Доречі в системі, яка 3,2,х Вже є команда генерації тайлвінд артісановська.