Nikita

Nikita

С нами с 18 февраля 2013; Место в рейтинге пользователей: #353
t.g
t.g
23 июля 2017, 22:47
2
+1
Делал AMP страници через подмену шаблона при наличии get параметра ?amp, только со страницами блога.
Пример url:
https://sitename.com/articles/articles-name.html?amp
Условие замены шаблона. (возможно кто-то подскажет как его немножко улучшить, не знал как взять id шаблона текущей страницы одним запросом)

$id = $modx->resource->get('id'); // Get current page id
$resource = $modx->getObject('modResource',$id); // Get current object
$template = $resource->get('template'); // Get current page template

if($template == 5 && isset($_GET['amp'])) {
    
    $modx->resource->set('template', 23); 
    
} 

$modx->resource->cacheable = false; // Disable cache
Важно выключить кэширование, чтобы изменение шаблона не закешировалось.
Повесил на событие (OnLoadWebDocument)

Валидацию с get параметром проходит.
search.google.com/test/amp
gluck
04 июня 2017, 11:54
1
0
Да, вручную, я смоделировал работу редактора.
Полчаса назад сделал точно как вы описали здесь, только еще добавил и время создания. Мало ли редактору захочется написать > 1 новости сегодня…

if ( $resource->get('parent') == 9 && $mode == 'new')
{
    $resource->set('alias',$resource->get('alias').'-'.$resource->get('createdon'));
}
Повесился только на один OnBeforeDocFormSave, это было ключевым моментом, спасибо за подсказку. Если повеситься на несколько событий — не происходило ничего.
Роман Ильин
09 мая 2017, 09:24
2
0
Спасибо!

Нашел еще такой короткий вариант:
{$imgurl | phpthumbon : "w=556&h=376&zc=1&q=61"}

Небольшой вопрос вдогонку. Как в Fenom сделать конкатенацию строк?
Максим Кузнецов
10 апреля 2017, 08:29
2
+3
Не нужно 2 раза вызывать один и тот же сниппет:

{set $result = $_modx->runSnippet('!pdoResources', [
	'parents' => id родителя
])}

{if $result | length > 0}
	{$result}
{else}
	//если вывода нет
{/if}
Василий Stepanov
02 апреля 2017, 04:18
2
+1
Сделал вот так. Работает.
//собираем заголовки из категории ресурсов
$docfind = $modx->getCollection('modResource',array('parent' => '19'));
foreach ($docfind as $k => $res) {
    $title_m = $res->get('pagetitle');
    $titles[] = $title_m;
}

$path = 'http://www.amur.info/index.rss';
$ctx = stream_context_create(array('http' => array('timeout' => 6)));
$file = file_get_contents($path, 0, $ctx);

if ($file) {
    $rss = simplexml_load_string($file);
    $i = 0;
    foreach ($rss->channel->item as $item){
        $namespaces = $item->getNameSpaces(true);
        $yandex = $item->children($namespaces['yandex']); 
        
        $full_text = (string)$yandex->{'full-text'};       //полный текст статьи
        $title = $item->title;                             //заголовок статьи
        $pubdate = $item->pubDate;                         //дата публикации
        $link = $item->link;                               //ссылка на новость
        
	//создаем ресурсы в MODX, если ресурсов с такими заголовками еще нет
        if (in_array($title, $titles) == false) {
            $response = $modx->runProcessor('resource/create', array(
                'pagetitle' => $title,
                'longtitle' => $pubdate,
                'description' => $link,
                'introtext' => '',
                'content' => $full,
                'template' => $template,
            	'hidemenu' => 1,
            	'published' => 1,
            	'parent' => '19'
            ));
        }
        
        $i++;
        if ($i == 5) break;
    }
}
Aleksandr Suslov
15 февраля 2017, 14:51
1
0
Спасибо большое. Ссылка помогла.
Если вдруг найдется такой же неуч, как я вот правильный код вывода:

$user = $modx->getObject('modUser', 3);
$profile = $user->getOne('Profile');
$extended = $profile->get('extended');
$comn = $extended['company_name'];
print($comn);
ck
ck
31 января 2017, 14:27
1
0
Сам себе отвечу: в текущей версии msProductOptions есть параметр &onlyOptions. Его и нужно использовать.
charset
21 декабря 2016, 22:29
2
+1
уже не нужно. Нашел в коде, если кому интересно:

Телефон покупателя: {$address.phone}
Email покупателя: {$user.email}
Способ доставки: {$delivery.name}
Тип оплаты: {$payment.name}
Комментарий к заказу: {$address.comment}
but1head
08 ноября 2016, 20:58
2
0
<?php
if($modx->event->name != 'msOnGetProductPrice') return;

if($modx->user  && $modx->user->isMember('Wholesaler')){
    $values = & $modx->event->returnedValues;
    $resource = $modx->getObject('msProduct', $product->id);
    $wholesale_price = $resource->getTVValue('price_opt');
    if($wholesale_price){
        $values['old_price'] = $values['price'];
        $values['price'] = $wholesale_price;
    }
}
Элементарная оптовая цена для юзеров в группе «оптовик», сделаная через tv, 3 минуты работы. Очень сложно?
Важное качество программиста «гуглить», а не просить сделать других его работу. Не умеете — не беритесь.