Разделы

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

Используя сниппет 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)

RSS свернуть / развернуть
0
Для начала такой вопрос — зачем было задействовано два разных события?

&eFormOnBeforeMailSent=`CreateNewArticle` &eFormOnBeforeFormParse=`ParseForm`


Если это принципиально, то надо разбираться. Если нет, то все решается в обработке одного события и соответственно добавление условия на наличие файла.
avatar

Carw

  • 1 ноября 2009, 17:38
0
Два события это из за того что два разных сниппета просто объединены в один, а сделать один профессионально у меня не получается
мне хватит одного события, не знаю как нормально это сделать
по этому и прошу помощи

avatar

1234

  • 1 ноября 2009, 19:59
0
То есть мне нужен сниппет NewArticleEvent, но с возможностью аттачить документы
и в зависимости от того, присоединен документ или нет, выводить ссылку на документ в публикуемом документе (если присоединен)
avatar

1234

  • 1 ноября 2009, 20:30
0
там еще такой смысл при прикреплении файла он переименовывается в формат даты
$target_path = $target_path . date("iGdmy").".zip";

avatar

1234

  • 1 ноября 2009, 20:33
0
В целом это может выглядеть примерно так:

<?php

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

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

    $doc->Set('template','red'); // задаем шаблон
    $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>";
	
	if($target_file == null) {
		$cont .= '<b><u><a href="' . $target_file . '.zip" title="Документация" >Документация</a></u></b>';
	}
	
	$doc->Set('content',$cont);

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

}

?>


Хотя код писал на лету и не проверял, но должно работать.
avatar

Carw

  • 3 ноября 2009, 13:48

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.