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, то цей контроллер підвантажується плагіном
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'); }
Artur
зробіть composer update в core, поставте xdebug та брекпойнт на початку, пройдіться з ним, велика вірогідність що спіймаєте десь помилку. можливо десь не підтягується якийсь файл.
Artur
доречі, кому треба xdebug, можете юзати мій докерфайл - в \evolution\core\vendor\evolutioncms\salo2\runtimes\8.2\Dockerfile перша строка FROM php:8.2-apache замінюється на FROM arturwork/php84-apache-xdebug:latest а далі як звичайно з salo (sail), ну або ось готовий docker-compose.yml # For more information: https://laravel.com/docs/sail services: evo.php: build: context: core/vendor/evolutioncms/salo2/runtimes/8.2 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' extra_hosts: - "host.docker.internal:host-gateway" image: evo.php:latest ports: - '80:80' environment: WWWUSER: '${WWWUSER}' LARAVEL_SALO: 1 volumes: - '.:/var/www/html' networks: - salo depends_on: - mysql mysql: image: 'mysql:8.2' command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_general_ci] ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' volumes: - 'salomysql:/var/lib/mysql' networks: - salo healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s adminer: image: adminer:latest restart: always environment: ADMINER_DEFAULT_SERVER: mysql ports: - '8080:8080' networks: - salo depends_on: - mysql networks: salo: driver: bridge volumes: salomysql: driver: local
Artur
я б взагалі поклав поруч та додав би до команди salo цю опцію - генерувати з xdebug чи без. Або через окремий докерфайл, який покласти поруч, або вбудувати xdebug в контейнер (створити окремий саме під Ево) та вмикати за потреби через параметр, що передасть mode.
𝓔𝓾𝓰𝓮𝓷𝓮
А я і думаю, що так тихо тут, а оно мене викинуло ))
Dmytro
А я і думаю, що так тихо тут, а оно мене викинуло ))
то я випадково але не запам'ятав кого саме видалив, вибач
Artur
https://anvaka.github.io/map-of-github/#11.19/24.8219/-15.6701 цікаву штуку зробили - граф пов'язаних репозиторіїв на Гітхабі. можна швидко подивитися, що є з невідомого по ModX/Evo, чи по Laravel
Serhii
https://anvaka.github.io/map-of-github/#11.19/24.8219/-15.6701 цікаву штуку зробили - граф пов'язаних репозиторіїв на Гітхабі. можна швидко подивитися, що є з невідомого по ModX/Evo, чи по Laravel
Залипательно, але мало інформативно. Як воно збиралось не ясно. Нашого інструментарія не видно. Але штука прикольна.
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>
𝓔𝓾𝓰𝓮𝓷𝓮
можливо можно по іншому
Yevhenii
Ого. Дякую всім
𝓔𝓾𝓰𝓮𝓷𝓮
Ого. Дякую всім
Там можливо треба не alias, тут тре дивитися сайт в тебе з .html чи ні? Який рівень вкладень?
Serhii
Serhii
Ого. Дякую всім
Чекайте, шось в коді мультимову не бачу. Походу тільки мультисайт завіз.
Serhii
Але можна поколупати код. Та розібратись.
Serhii
Там можливо треба не alias, тут тре дивитися сайт в тебе з .html чи ні? Який рівень вкладень?
Воно генерить і так і так. Короче як тре так і генерить. Інавіть така приколяха є.
𝓔𝓾𝓰𝓮𝓷𝓮
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/
𝓔𝓾𝓰𝓮𝓷𝓮
Доречы мови з sLang отак можна отримати evo()->getConfig('s_lang_front') https://seiger.github.io/sLang/use-in-blade/
Тоді можно так: $languages = evo()->getConfig('s_lang_front'); та треба глянути як воно передає, можливо треба розбити
Serhii
Так, це потрібна фішка, зараз ЦЕОшніки прямо кохають цей сайтмап, хоча по мені, повна фігня))
Ну той сайтмап, що модуль формує, відповідає вимогам сеошників.
Maxa
> ы 👀
Serhii
> ы 👀
Та дохріналіон мов на компі.
Maxa
b| 😋
Serhii
Serhii
Тоді можно так: $languages = evo()->getConfig('s_lang_front'); та треба глянути як воно передає, можливо треба розбити
Такий підхід гарантує, що всі опубліковані мови підтягнуться. А якщо якусь з мов вимкнуть, то вона автоматом пропаде з сайтмап. Вважаю так краще ніж ХАРДКОР Хардкод
𝓔𝓾𝓰𝓮𝓷𝓮
Yevhenii
Вийшло?
Пробую ще, Вашим методом
𝓔𝓾𝓰𝓮𝓷𝓮
Напиши потім
𝓔𝓾𝓰𝓮𝓷𝓮
Пробую ще, Вашим методом
І не треба иене з великої букви писати)) Я той ще злодій)))
Yevhenii
І не треба иене з великої букви писати)) Я той ще злодій)))
Питання, а можна якось з контролеру дізнатися адреси головних сторінок всіх мовних версій? Багатенько захардкожено, я б трохи переписав
𝓔𝓾𝓰𝓮𝓷𝓮
Зараз гляну
Yevhenii
Так Здається через геткнфіг
Там лише поточна мова
𝓔𝓾𝓰𝓮𝓷𝓮
Ні Я мав на увазі гетконфіг та потім префікс підставити
𝓔𝓾𝓰𝓮𝓷𝓮
Трохи перероблю З урахуванням sLang
𝓔𝓾𝓰𝓮𝓷𝓮
Там лише поточна мова
Зможешь показати (dd), як виводится інфа тут evo()->getConfig('s_lang_front');
Yevhenii
Ідеально було б отримати з контроллера урли для головної як тут у langSwitcher'і
Yevhenii
Повні урли
𝓔𝓾𝓰𝓮𝓷𝓮
Тоді ще краще
𝓔𝓾𝓰𝓮𝓷𝓮
Повні урли навіть на сторонці з другим та третім вкладанням?
Yevhenii
𝓔𝓾𝓰𝓮𝓷𝓮
А то я не туді зайшов
𝓔𝓾𝓰𝓮𝓷𝓮
@seigerit я так розумію з масиву, верхній це голона мова. Так?
𝓔𝓾𝓰𝓮𝓷𝓮
Так, для карти всі вкладення потрібні
Трохи пізніше спробуємо з sLang ом Мабуть завтра в раннці Бо пішов Мопса вигулювати
𝓔𝓾𝓰𝓮𝓷𝓮
Так. Типово вона без префіксу
Сергій Зможемо темплейтєдітор3 Переробити на sTemplateEditor?))) Я думаю тут багато людей котрі навіть задонатять на це) Треба щоб воно працювало з sLang
Serhii
Доречі готуйтесь, що адмінка та тайлвінд 4 переїде.
Serhii
Модулі вже переводжу.
𝓔𝓾𝓰𝓮𝓷𝓮
Так, про це думав. Але мене на все не вистачає. Але буде. Чекайте.
Так розумію Сам як мотня Ти не поспішай, та відкрий банку на темплейт Наберемо грошей, тоді роби
Serhii
Та кидайте на загальну банку
𝓔𝓾𝓰𝓮𝓷𝓮
Модулі вже переводжу.
Ви з Дмитром як завжди.... Як тепер я можу спати??!!!
Serhii
Доречі підкачало комьюніті. На обслуговування Ево було витрачено 7 000 грн, а накидали всього 2 000.
Serhii
Доречі в системі, яка 3,2,х Вже є команда генерації тайлвінд артісановська.