Oleg

Oleg

Был в сети 18 августа 2022, 08:13
Заказы принимаю
У меня это все выглядит таким образом:
<?php
$output = "";
$resources = $modx->runSnippet('pdoResources', [
	'parents' => 0,
	'limit' => 0,
	'resources'=>'-9, -10',
	'sortby'=>'{"id":"ASC"}',
	'leftJoin' => '{
    		"localizator" : {
    			"class" : "localizatorContent",
    			"alias" : "localizator",
    			"on" : "localizator.resource_id = modResource.id"
    		}
    	}',
	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
	'where' => [
		'localizator.key' => $modx->localizator_key,
		'localizator.active' => 1,
	],
	'return' => 'json',
]);

if($resources) {
	$resources = json_decode($resources);
	foreach($resources as $resource) {
	    $lang = $modx->localizator_key;
	    $out_uri = $resource->uri;
	    if($lang != 'ru'){
		    $url = $modx->config['site_url'] .$lang.'/'. $$out_uri;
	        }else{
	        $url = $modx->config['site_url'] . $out_uri;    
	        }
		$changefreq = 'weekly';
		$priority = '0.5';

		// дата изменения
		$lastmod = date('Y-m-d', $resource->editedon ?: $resource->createdon);

		/* if($row['last_review_date']){
		$date = new DateTime($row['last_review_date']);
		$lastmod = $date->format('Y-m-d');
		} */


		// пометка ежечастного обноавления, id категорий
		if(in_array($resource->parent, [35, 36, 4])) $changefreq = 'hourly';

		// приоретитет
		if(in_array($resource->id, [1, 2, 3])) $priority = '1.0';
        $url_our = str_replace('index', '', $url);
		$output .= "
		<url>
		    <loc>{$url_our}</loc>
		    <lastmod>{$lastmod}</lastmod>
		    <changefreq>{$changefreq}</changefreq>
		    <priority>{$priority}</priority>
		</url>
		";
	}

}

return $output;
Мой вызов:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{'!getSiteMap' | snippet}
</urlset>
Хотя можно еще подшаманить и оставить просто вызов сниппета без обертки.
Спасибо.
Я знаю что можно.
А как?)
Вот как бы вы пошли к этому решению?
Например я добавил ссылку на статью.
На ваш манер она адекватная?
Для старта и понимания процесса ее достаточно?

Сейчас я не знаю как проводить аутоидентификацию (никогда еще этого не делал). Стоит ли городить там заборы на всякий пожарный от шаловливых ручек школьников, или достаточно того что уже имеется.
Как раскидать админский доступ от пользовательского. Пилить что-то собственное?

Ведь придется заводить еще как минимум два уровня.
СуперЮзер (тобишь я разраб), Администратор (владелец), Пользователь (Клиент).
А еще должен стоять парсер который оценивает количество продаваемой игровой валюты.
К слову сайт по продажам игровой валюты в ммо.
И да, это как пример, у меня там с заходом через задние ворота сделано.

А вообще — документацию читать нужно.
--> Документация
Пример оформления:
[[pdoMenu?
    &parents=`0`
    &level=`2`
    &tplInner=`@INLINE [[+wrapper]]`
    &tplParentRow=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
    &countChildren=`1`
]]

&tpl Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию:
@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
Игнорирование кода
Так как в Fenom используются фигурные скобки, то возможно возникнет такая проблема, что не будут выполняться какие-то скрипты/стили.
Для этих случаев существует переменная ignore. Для того, чтобы выключить обработку Fenom необходимо просто обернуть скрипты/стили в этот тег:

<style>
{ignore}

body {font-size: 16px; background-color: #000;}

{/ignore}
</style>
Мой вариант вывода перевода в мигсах

Админка:


Вкладка формы(поля контейнера для значений):
[
  {
    "caption": "Заголовок",
    "fields": [
      {
        "field": "lang",
        "caption": "Локализация",
        "inputTVtype": "listbox",
        "inputOptionValues": "Русский==ru||English==en||O'zbek==uz"
      },
      {
        "field": "text",
        "caption": "Заголовок",
        "inputTV": "block_menu"
      }
    ]
  }
]

Разметка колонок(поле тоже):
[{
  "header": "Локализация",
  "width":"50",
  "dataIndex": "lang"
}]

«inputTV»: «block_menu»
Подключил доп поле, которое не к какому шаблону не присовил.