Разделы

  
 

Запись большого числа ресурсов в базу [Решено].

Добрый день.
Пытаюсь заполнить в Revo большое количество ресурсов сразу. Поступаю следующим образом — в цикле создаю объект modResouce. Set'ом добавляю нужные мне значения и после этого делаю save.
Вот пример кода:

for($i=0;$i<100;$i++) {
  $res = $modx->newObject('modResource');
  $res->set('pagetitle',$pagetitle);
  /* здесь заполняются другие поля */
  $res->save();
}

Проблема в том, что за 20 минут заполняется примерно 150 ресурсов.
Делаю всё на виртуалке — конфигурация следующая:
Двухядерный процессор 2.6, 1Гб оперативки, ОС CentOS 6 сервер, NGINX 1.1.5, php 5.3.8 через FastCGI, MySQL 5.5.16, MODX Revo 2.1.4.

Пробовал создавать один объект и в цикле менять ему значения и сохранять. Работает довольно быстро — сотня прогонов за пару секунд. Также пробовал создавать объекты в цикле, менять им данные, но не сохранять — работает тоже шустро. Ещё пытался сделать такое же на VPS — там стоит апач и пхп 5.2, но скорость оказалась примерно та же, так кроме того апач начинает поедать оперативу — чем большая итерация тем больше поедает.

Вопрос: как создавать большое количество новых документов в MODX Revo с приемлемой скоростью. Желательно не обращаться к базе напрямую. Заранее спасибо.
  • 0
  • 10 ноября 2011, 15:03
  • Hetzer
  • 10

Нужно массово создать документы в MODx по готовым данным

Здравствуйте. Ищу специалиста по MODx Evolution.
Что есть?
1) Несколько файлов Excel, с информацией по объектам.
2) Установленный MODx с созданными документами-папками.

Что нужно?
1) Выцепить из Excel информацию. Строка — это один документ, каждый столбец соответствует значениям [+pagetitle+], [+content+] и другим дополнительным TV-параметрам.
2) Создать по этим данным дочерние документу в заранее созданной папке в MODx. Создаваемым документам должен быть назначен определенный шаблон и некоторые другие значения TV-параметров по умолчанию.

Вроде все достаточно просто. Есть упорядоченная информация, по ней надо создать документы в CMS. Вручную это не сделать, т.к. документов всего будет в районе 8000.
Готов оплатить тому, кто предложит простое и удобное решение. Нужно довольно срочно.
Добавлять я буду сам. Нужна только инструкция, как это сделать. И чтобы ваше решение было достаточно гибким, чтобы я мог менять скрипт (или это будет не скрипт), т.к. в файлах Excel информация немного разная.

Заранее спасибо.

Создание документов только в определенной папке для разных групп пользователей

Пока на стадиях раздумьях что делать… подскажите в какую сторону копать, ситуация следущая, продумываю функционал сайта для тренингового центра, в нем, кроме группы админов и журналистов, будет группа пользователей которые могли бы создавать только документы (тренинги) с определенным шаблоном и в определенной папке. Теперь внимание вопрос как лучше это реализовать:
1)c помощью отдельной страницы которая будет доступна только тренерам
2)каким то образом настроить так права в админке чтобы тренер мог создавать документы только в определенной папке
Я не очень силен в MODX, поиск пока привел меня только к плагину ManagerManager но это не совсем то что мне нужно.
  • 0
  • 28 октября 2010, 17:07
  • Gres
  • 7

объединение сниппетов

Используя сниппет NewArticleEvent, из темы создание документов, столкнулся с необходимостью прикрепления файлов. нашел сниппет ParseForm и объединил их в сниппете NewArticleEvent получилось следующее
Вызов:
[!NewArticleEvent!][!eForm? &formid=`newArticle`&subject=`Посетители` &tpl=`tenderform` &eFormOnBeforeMailSent=`CreateNewArticle` &eFormOnBeforeFormParse=`ParseForm` &vericode=`1`!]

Сниппет NewArticleEvent:
<?php
$modx->regClientStartupScript('assets/snippets/nikoFeedBack/validate.js');
$modx->regClientCSS('assets/snippets/nikoFeedBack/form.css');
function ParseForm( &$fields ){

      //global $modx;
      $target_path = "/www/electrim/www/htdocs/assets/tz/";
      $target_path = $target_path . date("iGdmy").".zip";
    if(move_uploaded_file($_FILES['attach']['tmp_name'], $target_path)) {
      echo "Файл ". basename( $_FILES['uploadedfile']['name']). " был загружен.";
       } else{
       echo "Загрузить файл не удалось , попробуйте ещё раз!";
      }
      return true;
       }
function CreateNewArticle(&$fields){
    // Массив $fields будет содержать данные всех полей формы
    // Создания документа с описанием.
    require_once('assets/libs/docmanager/document.class.inc.php');
    $doc = new Document(); // создаем документ

    $doc->Set('parent',2); // определяем в какую папку положить

    $doc->Set('template','red'); // задаем шаблон
$zip=date("iGdmy");
    $doc->Set('pagetitle',$fields['region']);  // район

    $doc->Set('introtext',$fields['fbName']); // аннотацию

$int = $fields['fbName'];
$into = $fields['fbTel'];
$cont = $fields['content'] . "
<H1>$int</H1>
<H2>$into</H2>http://community.modx-cms.ru/topic/add/#
$zip.zip
";
$doc->Set('content',$cont);

    $doc->Save(); // сохраняем
    return true; // Говорим eForm, что все в порядке.

}
?>

Теперь сам вопрос:
как сделать так, чтобы при прикреплении файла пользователем становилось
$cont = $fields['content'] . "
<H1>$int</H1>
<H2>$into</H2>
<b><u><a href="$zip.zip" title="Документация" >Документация</a></u></b>
";
$doc->Set('content',$cont);

а если не прикрепляется то строчка
<a href="$zip.zip" title="Документация" >Документация</a>
не вставляется.
И вообще может както упростить сниппет?
Спасибо
  • 0
  • 31 октября 2009, 22:02
  • 1234
  • 5