Илья Уткин

Илья Уткин

С нами с 15 декабря 2012; Место в рейтинге пользователей: #9
Илья Уткин
28 февраля 2017, 15:00
0
[[getProducts? &parents=`45` &toPlaceholder=`result` &tpl=`idparent` &depth=`1` &limit=`0` &tvFilters=`{"applicability:LIKE":"%[[*pagetitle]]%"}` &where=`{"template:=":5}`]]
[[+result:notempty=`
<div class="panel panel-default">
    <div class="panel-heading" role="tab" id="heading-45" href="#collapse-45" data-toggle="collapse" data-parent="#accordion" aria-expanded="false" aria-controls="collapse-45">
		<a class="collapsed sprites i-down" data-toggle="collapse" data-parent="#accordion" href="#collapse-45" aria-expanded="false" aria-controls="collapse-45"></a>
		<a href="#collapse-45" data-toggle="collapse" data-parent="#accordion" aria-expanded="false" aria-controls="collapse-45" class="category-link">Безопасность (Аэрбеги)</a>
	</div>
	<div id="collapse-45" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading-45">
		<div class="panel-body">
			<ul class="sub-menu" style="border-left: dotted 1px #999;">
                    [[getProducts?
                        &parents=`-1`
			&resources=`0[[+result]]`               	
                    	&tpl=`inner_sideTpl_GP`
                    	&limit=`0`
                    	&activeClass=`active`
                    	&orderby=`{"pagetitle":"ASC"}`
                    ]]	    
			</ul>
		</div>
	</div>
</div>
`]]

Но это только уберёт двойной вызов. Думаю, основная нагрузка всё-таки в чанке inner_sideTpl_GP
Илья Уткин
28 февраля 2017, 12:45
0
3000 руб., сегодня будет готово.

Skype: ilyautkin, E-mail: ilyautkin@mail.ru, VK: vk.com/ilyautkin
Илья Уткин
28 февраля 2017, 08:10
0
Эти данные можно получить как-то так:

$url = 'https://www.instagram.com/'.$instaLogin;
$page = explode('window._sharedData = ', file_get_contents($url));
$json = explode(';</script>', $page[1]);
$profileJSON = $modx->fromJSON($json[0]);
$profile = $profileJSON['entry_data']['ProfilePage'][0]['user'];

$ava = $profile['profile_pic_url_hd']; // аватар
$followers = $profile['follows']['count']; // подписки
$followed = $profile['followed_by']['count']; // подписчики
$post_count = $profile['media']['count']; // количество постов
Илья Уткин
27 февраля 2017, 18:42
+2
Вот код плагина для этого: ilyaut.ru/cheats/to-prevent-tickets-to-fill-introtext/
Илья Уткин
27 февраля 2017, 10:47
1
+1
Только вместо 16 вставьте свой id ТВ-шки
&select=`modResource.*, CAST(IFNULL(TVzena-nds.value, 0) AS DECIMAL(13,0)) AS zena-nds`
&leftJoin=> `{
    "TVzena-nds":
        {"class":"modTemplateVarResource",
         "on":"TVzena-nds.contentid = modResource.id AND TVzena-nds.tmplvarid = 16"}
    }`
Илья Уткин
27 февраля 2017, 10:33
0
Только тут нужно не сортировать, а добавить в select изменение типа поля
Илья Уткин
27 февраля 2017, 10:30
0
Ой, ну и ограничить выборку, конечно, надо
$q->where(array(
    'MIGX.value:!=' => '',
    'MIGX.value:!=' => '[]',
    'MIGX.value:IS NOT' => NULL
));
Илья Уткин
27 февраля 2017, 10:27
0
Для получения значений ТВ-параметров у ресурсов MODX есть метод getTVValue. Он делает то же самое, но код становится чище, опрятнее и гораздо более читабельным:
$res = $g1->getTVValue('tv_name');

Ну и в дальнейшем нужно углублять знания SQL и xPDO.

В этом коде делается много запросов к базе данных: сначала получаем все нужные ресурсы (1 запрос), и потом на каждый ресурс делаем дополнительный запрос в базу, чтобы получить значение TV-параметра. При большом количестве ресурсов сниппет будет создавать нехилую нагрузку.

Чтобы такого избежать, используем LEFT JOIN:
// Выборка ресурсов сразу с ТВ-шками
$q = $modx->newQuery('modResource', array('parent' => $parent));
$q->leftJoin('modTemplateVarResource', 'MIGX', 'modResource.id = MIGX.contentid AND MIGX.tmplvarid = 1');
$q->select('`MIGX`.`value` AS `text`');
$g = $modx->getIterator('modResource', $q);

// Получение нужных полей из JSON
foreach ($g as $g1){
    $res = $g1->get('text');
    if (!$res) {
        continue;
    }
    $r = $modx->fromJSON($res);
    foreach ($r as $r1){
        $output[] = $r1['text'];
    }
}
Илья Уткин
21 февраля 2017, 07:08
+3
Новость только появилась, мест ещё много. Если будет слишком много желающих, тогда можно будет поставить счётчик на сайт.
Илья Уткин
17 февраля 2017, 13:47
0
Ммм… вот про addslashes не знаю… Может, придут более подкованные специалисты и подскажут)) ¯\_(ツ)_/¯
Илья Уткин
17 февраля 2017, 12:13
0
Но и тогда есть выход — ресурсы такие создавать (внутри каждой модели), только цену на них выводить из того нашего интерфейса. А сама страница будет содержать только статью для SEO.
Илья Уткин
17 февраля 2017, 12:13
0
Или надо, чтобы были страницы «Замена экрана iPhone 4S», «Замена экрана iPhone 5», «Замена экрана iPhone 5S»?
Илья Уткин
17 февраля 2017, 12:11
0
Для услуг можно создать отдельные страницы. Только не внутри каждой модели, а внутри отдельного контейнера — «Услуги» Тогда поле «Услуга» делаем списком, в котором будут ресурсы из контейнера «Услуги».
Илья Уткин
17 февраля 2017, 09:37
0
Оффтоп…

У меня, вроде, br не съедаются:
<br>
Илья Уткин
17 февраля 2017, 09:25
1
0
Если вынос информации в кастомную базу данных не рассматривается, я бы сделал так:

Услуги не включены в ресурсы. Нам же не нужны отдельные страницы для каждой услуги со своим URL…
  • Ремонт телефонов
    • Ремонт Iphone
      • Ремонт Iphone 7
      • Ремонт Iphone 5
    • Ремонт Samsung
  • Ремонт Планшетов

У ресурсов «Ремонт Iphone» и «Ремонт Samsung» добавил бы TV MIGX — основной управляющий блок.

Преимущества MIGX в том, что он может включать в себя другие MIGX. Соответственно на первом уровне будет 3 поля: текстовое поле «Услуга», текстовая область «Описание» ещё один MIGX.

Во втором MIGX будет выпадающий список с дочерними ресурсами и текстовые поля «Стоимость», «Время», может ещё что.



Для вывода на сайте просто можно распарсить получившийся JSON и выводить для каждой модели свою табличку. В родителе можно составить сводную табличку.

Ну и заполнять будет удобно — не надо будет одно и то же в разных ресурсах писать. И редактировать тоже удобно.
Илья Уткин
17 февраля 2017, 08:35
1
+1
Запросы INSERT и UPDATE на PDO (but1head где-то поделился, я к себе утащил)