Наумов Алексей

Наумов Алексей

Был в сети 28 июля 2026, 14:21
Заказы принимаю
Привет, классно!

Вопросы от меня:
1. пример выборки для pdoResources (с LEFT JOIN имею ввиду) можно?
2. Как реализована защита от повторного голосования гостями и авторизованными пользователями?
У меня тоже знакомый есть с маленьким интернет-магазином, ну больше как хобби, и в плане финансов нельзя сказать, что прибыльно то прям.

У него очень сезонная торговля, прям вот 2 недели перед праздниками, весь остальной год можно ничего не делать, т.к. будет 2 клиента.

Он тоже под большим вопросом с этими кассами и думает, не закрыться ли, хотя у него авторский товар, интересный и не обычный. Вот такой пинк от государства.
Делаете чанк form, в котором есть:

<input name="subject" value="[[+subject:default=`Тема письма по-умолчанию`]]" />
Вызываете этот чанк 7 раз:
[[$form? &subject=`Тема 1`]]
[[$form? &subject=`Тема 2`]]
...
[[$form? &subject=`Тема 7`]]
А в обработчике ставите emailUseFieldForSubject = 1, emailSubject оставляете при этом пустым
Ага, и у меня общее впечатление сложилось именно такое…
Вот вам 2 недели мучений, 30000 разовых расходов, ежемесячные расходы, и это все с сотен тысяч организаций!

И да, стоит учесть, что в modstore работают айтишники, хорошие специалисты, которые смогли все сделать сами, тогда как подавляющему большинству компаний придется кого-то нанимать для выполнения этой работы.
О, это просто!

1. Делаем новый TV: changeTemplate, тип текст
2. Бацаем плагин на событие OnDocFormRender
3. Теперь открываем документ, допустим Новости, и в TV поле changeTemplate пишем 2, где 2 — это id шаблона Новость. Теперь у создаваемых новостей будет автоматом шаблон 2.
Но еще круче. Допустим, у нас структура Каталог-Категория-Категория-Товар. Значит в TV у Каталога мы пишем: 3,3,4, где 3 — шаблон категории, а 4 — товара. Короче прям прописываем шаблоны внутрь структуры )

Код плагина
<?php
/**
* =========================
* ChangeTemplate
* =========================
*
* Plugin for MODX Revolution
* Set which template is inherited by children 
* documents of a certain parent document
*
* Author:
* Marc Loehe (boundaryfunctions)
* marcloehe.de
*
* Modified by:
* Lorenzo Stanco <lorenzo.stanco@gmail.com>
* Lorenzostanco.com
*
* Usage:
*
* 1. Paste this as new plugin and connect it to system event
* 'OnDocFormRender'.
*
* 2. Assign a new TV 'changeTemplate' to each template
* for which you want to define the default children template.
*
* 3. Set the newly created TV to input type "Text" 
*
* 4. Open a document and in the 'changeTemplate' TV type a 
* comma separated list of template IDs.
*
* 5. Have fun!
*
*/
 
// Check Event
if ($modx->event->name == 'OnDocFormRender' && $mode == modSystemEvent::MODE_NEW) {
   
  $id = empty($_REQUEST['id']) ? false : $_REQUEST['id'];
  $id = empty($id) ? (empty($_REQUEST['parent']) ? false : $_REQUEST['parent']) : $_REQUEST['parent'];
  // Get current document ID
  if ($id) {
 
    // Document Chain
    $resources = array($id);
 
    // Get parent ID
    foreach ($modx->getParentIds($id, 10, array('context' => $_REQUEST['context_key'])) as $parentId) {
      if ($parentId) array_push($resources, $parentId);
    }
     
    // Search changeTemplate in the chain
    $level = 0;
    $childTemplates = array();
    foreach ($resources as $resourceId) {
      $resource = $modx->getObject('modResource', $resourceId);
      if ($childTemplatesTV = $resource->getTVValue('changeTemplate')) {
         
        // Create template array for each tree level
        $childTemplates = @explode(',', $childTemplatesTV);
        if (empty($childTemplates)) break;
        foreach ($childTemplates as $k => $v) $childTemplates[$k] = intval(trim($v));
         
        break;
 
      }
 
      $level++;
 
    }
 
    // Set template based on tree level
    if (!empty($childTemplates)) {
      $useTemplate = $childTemplates[$level];
      if (!empty($useTemplate)) {
        
        // Set default template
        if (isset($modx->controller)) {
          $modx->controller->setProperty('template', $useTemplate);
        } else { // modX < 2.2.0
          $_REQUEST['template'] = $useTemplate;
        }
 
      }
    }
 
  }
 
}
Частично сделал в версии 1.4.1.
Прописываются при создании сообщения — thread, при создании цепочки — resource, name.
Естественно, только если мы работаем на странице ресурса.

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