Андрей

Андрей

С нами с 28 февраля 2013; Место в рейтинге пользователей: #140
Андрей
06 декабря 2017, 09:29
0
В аккаунте магазина можно сбросить домен один раз вроде.
Андрей
06 декабря 2017, 09:27
0
Настройка «Использовать «замороженный» URI родителя» это не то что нужно?
Андрей
04 декабря 2017, 19:33
1
+1
Можно поставить дополнение Console и выполнить там код.

Есть несколько вариантов:

1. Получить все ресурсы по артикулу и отметить как удаленные или сразу удалить
$articles = array('артикул1', 'артикул2');

$c = $modx->newQuery('msProduct');
$c->leftJoin('msProductData', 'Data');
$c->where(array(
  'Data.article:IN' => $articles
));

$products = $modx->getCollection('msProduct', $c);

foreach ($products as $product) {
  // 1. Отметить как удаленные
  $product->set('deleted', '1');
  $product->save();

  // 2. Удалить сразу
  // $product->remove(); 
}

2. Так же получить по артикулу и удалить через процессор (то же самое что удалить из админки)
$articles = array('артикул1', 'артикул2');
$products = array();

$c = $modx->newQuery('msProduct');
$c->leftJoin('msProductData', 'Data');
$c->where(array(
  'Data.article:IN' => $articles
));
$c->select(array(
  'msProduct.id as id'
));

if ($c->prepare() && $c->stmt->execute()) {
  $products = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}

if (!empty($products)) {
  foreach($products as $product) {
    $response = $modx->runProcessor('resource/delete', array(
      'id' => $product['id']
    ));
    
    if ($response->isError()) {
      $modx->log(1, 'Не удалось удалить ресурс');
    }
  }
}
Андрей
04 декабря 2017, 18:39
+1
Потому что для плейсхолдеров есть специальная переменная $_pls

В вашем случает будет $_pls['tv.image'] и посмотрите синтаксис.

{$_modx->runSnippet("!phpthumbon@PropertySet", [
    "input" => "/assets/images/"~$_pls['tv.image'], 
    "options" => "w=255&h=180&zc=1"
])}
Андрей
04 декабря 2017, 12:04
1
0
Пример рабочей формы с лендинга. Так же иногда требуется указать emailFrom почтой совпадающей с доменом.

{'!AjaxForm' | snippet : [
  'form' => '@INLINE
    <form class="form" method="post" action="">
      <input type="hidden" name="nospam">

      <div class="form-group">
        <div class="form-item">
          <label class="form-label" for="">Имя</label>
          <input class="form-field" type="text" name="name" value="{$_pls["fi.name"]}">
          <div class="error_name">{$_pls["fi.error.name"]}</div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-item">
          <label class="form-label" for="">Компания</label>
          <input class="form-field" type="text" name="company" value="{$_pls["fi.company"]}">
          <div class="error_company">{$_pls["fi.error.company"]}</div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-item">
          <label class="form-label" for="">E-mail</label>
          <input class="form-field" type="email" name="email" value="{$_pls["fi.email"]}">
          <div class="error_email">{$_pls["fi.error.email"]}</div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-item">
          <label class="form-label" for="">Телефон</label>
          <input class="form-field" type="tel" name="phone" value="{$_pls["fi.phone"]}">
          <div class="error_phone">{$_pls["fi.error.phone"]}</div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-item">
          <label class="form-label" for="">Сообщение</label>
          <textarea class="form-field" name="message" rows="5">{$_pls["fi.message"]}</textarea>
          <div class="error_message">{$_pls["fi.error.message"]}</div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-item">
          <input type="hidden" name="privacy[]" value="">
          <div class="checkbox">
            <input type="checkbox" name="privacy[]" id="privacy" value="agree">
            <label for="privacy">Отправляя заявку, я соглашаюсь на обработку персональных данных.</label>
          </div>
          <div class="error_privacy">{$_pls["fi.error.privacy"]}</div>
        </div>
      </div>
      <div class="form-group">
        <div class="form-item">
          <button class="button" type="submit">Отправить</button>
        </div>
      </div>
    </form>
  ',
  'emailTpl' => '@INLINE
    <h2>Сообщение с сайта {$_modx->config.site_name}</h2>
    <p><b>Имя:</b> {$name}</p>
    <p><b>Компания:</b> {$company}</p>
    <p><b>E-mail:</b> {$email}</p>
    <p><b>Телефон:</b> {$phone}</p>
    <p><b>Сообщение:</b> {$message}</p>
  ',

  'hooks' => 'email, FormItSaveForm',

  'emailSubject' => 'Сообщение с сайта '~$_modx->config.site_name,
  'emailTo' => $_modx->config.emailsender,
  'emailFrom' => $_modx->config.emailsender,
  'emailFromName' => $_modx->config.site_name,

  'formName' => 'Узнать подробнее',
  'formFields' => 'name,company,email,phone,message',
  'fieldNames' => 'name==Имя,company==Компания,email==E-mail,phone==Телефон,message==Сообщение',

  'validate' => 'nospam:blank, name:minLength=^3^:required, company:required, email:email:required, phone:required, message:minLength=^20^:required, privacy:required'
]}
Андрей
02 декабря 2017, 17:42
0
А так?

Вообще, при сохранении есть же проверка на дублирование и modx не даст создать 2 одинаковых алиаса.

<?php
    
switch ($modx->event->name) {
    case 'OnDocFormSave';    
 
        if ($resource->get('template') == 3) {
 
            $alias = $resource->cleanAlias($resource->pagetitle);
            
            $count = $modx->getCount('modResource', array(
                'parent' => $resource->parent,
                'alias' => $alias,
                'id:NOT' => $id
            ));
            
            if ($count > 0) {
                $postfix = substr($id, -2);
                $alias = $alias.'-'.$postfix;
                $resource->set('alias', $alias);
                $resource->save();
            }
            
        }
        
    break;
}
Андрей
02 декабря 2017, 16:45
0
Ну видимо проверить есть ли такой алиас уже или нет

<?php
switch ($modx->event->name) {
  case 'OnDocFormSave';
    // Для ресурсов, использующих определённый шаблон
    if ($resource->get('template') == 3) {
      $generated = $resource->cleanAlias($resource->pagetitle);

      $tmp = $modx->getObject('modResource', array(
        'parent' => $resource->get('parent'),
        'alias' => $generated
      ));

      if ($tmp) {
        $lasttwoid = substr($id, -2);
        $aliasid = $generated .'-'. $lasttwoid;
        $resource->set('alias', $aliasid);
        $resource->save();
      }
    }

  break;
}
Андрей
29 ноября 2017, 20:12
+1
Ссылки в сниппете так делаются:
$resource_id = 2;
$url = $modx->makeURL($resource_id);

По поводу распределения, можно сделать кучу плейсхолдеров и выводить их в любом месте:
$modx->toPlaceholders(array(
	'field_name_1' => 'value',
	'field_name_2' => 'value'
), 'my');

// [[+my.field_name_1]]
Андрей
08 октября 2017, 18:22
+2
При создании нет, но можно сделать немного по другому — записывать значения при сохранении.

Создать плагин на событие OnDocFormRender и указать в нем значения по-умолчанию. При сохранении ресурса плагин проверяет есть ли значения в TV с migx и если пусто, то записывает значения.

Т.е. вы создаете ресурс, сохраняете и значения записываются.

Пример плагина, в переменной $default ваши значения, $tvname имя TV

switch ($modx->event->name) {
  case 'OnDocFormRender':
    if ($mode === 'upd') {
        
        $tvname = 'autofill';
        
        $default = array(
            array(
                'MIGX_id' => 1,
                'name' => 'Тест'
            ),
            array(
                'MIGX_id' => 2,
                'name' => 'Тест 2'
            )        
        );
      
        $tv = $modx->fromJson($resource->getTVValue($tvname), true);
      
        if (empty($tv)) {
            if (!$resource->setTVValue($tvname, $modx->toJson($default))) {
                $modx->log(1, 'Не удалось добавить значение');
            };      
        }
      
    }
    
    break;
}
Андрей
18 сентября 2017, 19:51
0
Стандартными средствами никак, тоже была подобная задача на одном проекте.
Только править код дополнения.
Андрей
01 сентября 2017, 15:39
0
На сайте там изображения — баннеры всякие и элементы дизайна. Превьюхи там не обновляются практически.

Пробовал с помощью phpthumbon, так и не подобрал настройки, гуглу ничего не понравилось. Попробую ваш вариант.
Андрей
01 сентября 2017, 15:17
+1
Последний проект оптимизировал, сейчас набирает 98 баллов, 2 бала за яндекс аналитику снимает.

Делал так:
1. Оптимизировал изображения, можно заменять на те, что предлагает гугл
2. Сжать html
3. Все css и js в один файл

Гугл предлагает еще стили размещать перед закрывающим тегом body, но тогда при загрузке страницы все грузится без стилей сначала, что выглядит убого.

Решил просто — написал сниппет, который берет css сжатый minifyx и вставляет содержимое в head. Это дало самый большой прирост баллов.

Так же на некоторых хостингах приходится в htaccess настраивать кеширование и сжатие.
Андрей
31 августа 2017, 08:01
0
15000 р, если еще актуально. Контакты в профиле.
Андрей
30 августа 2017, 21:13
0
Я понимаю, что вместе с прикруткой такая цена может быть, но что бы чисто за верстку я таких страниц не видел. Половина из того что вы описали на верстку не влияет. И с каких пор верстка без бутстрапа влияет на цену?
Андрей
30 августа 2017, 20:26
+1
От 10 000 р, смотря что за макет и функционал. Контакты в профиле.
Андрей
30 августа 2017, 20:24
+2
Хотел бы я посмотреть на страницу за 75000
Андрей
29 июля 2017, 19:00
0
Если у вас всего две единицы измерения, не проще создать tv-параметр, какой-нибудь чекбокс или селект с выбором и в шаблоне проверять, если заполнен, то его выводить, если нет то стандартный.
Андрей
29 июля 2017, 18:34
+1
Делал версии для слабовидящих, просто присваиваете класс body и по нему переписываете стили, а что бы значения сохранялись записываете в сессию или куки флаг какой-нибудь.
Андрей
13 июля 2017, 11:32
0
Все хуки FormIt должны возвращать true при успешном выполнении, либо ошибку. Посмотрите в документации.

Если вам надо посмотреть что в переменной, то используйте логи Modx

$modx->log(1, 'текст');
Андрей
13 июля 2017, 11:26
0
У вас в англ версии нет страницы Аренда офисов, поэтому и переключателя нет, создайте страницу и свяжите их в настройках компонента