We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 51459
    • 2 Posts
    Доброго времени суток!
    Я недавно начал изучать Modx. И в связи сложившихся обстоятельств, передо мной стала задача, которую я не знаю как решить.
    Суть задачи. Необходимо разработать сервис в котором будет заходить/авторизироваться/регистрироваться пользователь. Дальше после того, как он зайдет в кабинет, он может редактировать создать заявку, либо открыть текущие заявки. В самих заявках будет сам вопрос менеджеру, и комментарии (обсуждение вопроса). С другой стороны всей этой системы будет менеджер(группа менеджеров) которая будет принимать и обрабатывать эти заявки.
    А теперь сам вопрос. Не подскажите какими средствами можно решить данную задачу? Может есть готовые решения, в которых можно покопаться и выяснить как все устроено? Или есть плагины, которые могут позволить решить проблему, хотя бы отчасти? В любом случае, от любой полезной информации по данному вопросу не откажусь.
      • 50870
      • 7 Posts
      Я бы сделал заявку ресурсом с шаблоном "Заявка", т.к. этот объект уже имеет нужные поля и для каждой заявки у нас автоматически будет создаваться страница, а еще он привязан к пользователю-автору.
      Далее - через FormIt можно реализовать добавление/редактирование ресурсов пользователями, для этого напишем hook вида:
      <?php
      $user_id = $modx->user->get('id');
      $user_music = $modx->getCollection('modResource', array(
          'template'  => 3,
          'createdby' => $user_id
      ));
      if (count($user_music) >= 3) { // может добавить не больше 3
          $errorMsg = 'Вы не можете загрузить больше 3 работ.';
          $hook->addError('nomination_file',$errorMsg);
          return false;
      }
      //$modx->log(xPDO::LOG_LEVEL_ERROR,print_r(count($user_music), true));
      
      // Count IDs
      $stmt = $modx->query("SELECT MAX(id) FROM {$modx->getTableName('modResource')}");
      $maxId = (integer) $stmt->fetch(PDO::FETCH_COLUMN);
      $stmt->closeCursor();
      $id = $maxId + 1;
      $aliasId = str_pad($id, 6, "0", STR_PAD_LEFT);
      
      $allFormFields = $hook->getValues();
      
      $pagetitle = $allFormFields['pagetitle'];
      $parent = $allFormFields['parent'];
      $tags = $allFormFields['tags'];
      $filename = $allFormFields['nomination_file'];
      
      //return;
      $doc = $modx->newObject('modResource');
      $doc->set('createdby', $user_id);
      $doc->set('createdon', time());
      $doc->set('menuindex',count($modx->getCollection('modResource',array('parent'=>$parent))));
      $doc->set('pagetitle', $pagetitle);
      $doc->set('parent', $parent);
      $doc->set('alias', $aliasId."_".$doc->cleanAlias($pagetitle));
      $doc->set('template', '3');
      $doc->save();
      
      if ($tv = $modx->getObject('modTemplateVar', array ('name'=>'musicItem'))) {
          $tv->setValue($doc->get('id'), $path . $filename);
          $tv->save();
      }
      if ($tv = $modx->getObject('modTemplateVar', array ('name'=>'tags'))) {
          $tv->setValue($doc->get('id'), $tags);
          $tv->save();
      }
      
      return true;

      Это hook для добавления ресурса с 2 TV - файлом и тегами.
      Внимание! Для сохранения файла на сервере нужен отдельный хук, этот - просто название в базу пишет.
      Но у вас то, вроде не будет файлов?

      А дальше - почти готово. Комменты через Quip. При желании рейтинг заявки - LikeDislike.

      Я недавно разрабатывал схожий по функционалу проект, если не разберетесь - пишите.
        • 51459
        • 2 Posts
        Спасибо, сохраню себе, разберусь. Если что отпишусь