Сниппет конвертирования из modResource в MS Word
        Сниппет способен формировать *.doc файлы на основе заголовка и текста указанной страницы.
Создаём сниппет под названием "modResource2Word":
В сниппете можно указать параметры:
&folders=`1` — это означает, что ресурсы с пометкой «контейнер» тоже обрабатывать (советую не ставить данный параметр, чтобы контейнеры не обрабатывал);
&parents=`24,29` — здесь можно указать id родителя, ресурсы которого будет обрабатывать, если указать id не из данного родителя, то сниппет не сформирует документ;
Создаём страницу с вызовом сниппета (шаблон ставим «пустой»), такого содержания:
В нужном месте документа, который нужно скачать даём ссылку на нашу страницу с вызовом сниппета:
P.S.: Если есть какие-то глюки, прошу строго не судить… :)
    
    
                                                                                
            Создаём сниппет под названием "modResource2Word":
<?php
// Сниппет формирования вордовского документа на основе ресурса MODX.... v0.02 Beta
$id = $_GET['rid'];
if($id=='') { return ''; }
$parents = $modx->getOption('parents', $scriptProperties, ''); // Список родителей.. разделитель запятая - ","
$folders = $modx->getOption('folders', $scriptProperties, 0); // Работать с контейнерами или нет (по умолчанию - нет)
// Получаем объект ресурса
$rObj = $modx->getObject('modResource', $id);
// Проверяем объект на существование
if(!is_object($rObj)) { return ''; }
$continue = true;
// Если указан список родителей, то проверяем является ли нас ресурс вложенным в них
if($parents!='') {
	$parents = explode(',', $parents);
	
	$continue = false;
	for($i=0; $i<count($parents); $i++)
	{
		$parentsArr = $modx->getParentIds($rObj->get('id'));
		if(in_array($parents[$i], $parentsArr)) {
			$continue = true;
		}
	}
}
// Пробиваем, не является ли наш ресурс контейнером
if(!$folders) {
	if($rObj->get('isfolder')) {
		$continue = false;
	}
}
if($continue) {
	$content = <<<HTML
	<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'>
	<head>
		<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
		<title>Download Document</title>
		<!--[if gte mso 9]>
		<xml>
		<w:WordDocument>
		<w:View>Print</w:View>
		<w:Zoom>90</w:Zoom>
		<w:DoNotOptimizeForBrowser/>
		</w:WordDocument>
		</xml>
		<![endif]-->
		<style>
			<!-- /* Style Definitions */
			@page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}
			div.Section1 {page:Section1;} -->
		</style>
	</head>
	<body lang="RU-RU" style='tab-interval:.5in'>
HTML;
	$content .= '<h1>'.$rObj->get('pagetitle').'</h1><p> </p>';
	$content .= ''.$rObj->get('content').'';
	$content .= '</body></html>';
	
	header("Content-Type: application/msword");
	header("Content-disposition: attachment; filename=doc-".$id.".doc");
	
	echo $content;
}В сниппете можно указать параметры:
&folders=`1` — это означает, что ресурсы с пометкой «контейнер» тоже обрабатывать (советую не ставить данный параметр, чтобы контейнеры не обрабатывал);
&parents=`24,29` — здесь можно указать id родителя, ресурсы которого будет обрабатывать, если указать id не из данного родителя, то сниппет не сформирует документ;
Создаём страницу с вызовом сниппета (шаблон ставим «пустой»), такого содержания:
[[!modResource2Word?]]В нужном месте документа, который нужно скачать даём ссылку на нашу страницу с вызовом сниппета:
<a href="[[~idресурсасвызовомсниппета? &rid=`[[*id]]` ]]">Скачать</a>Теперь при клике на ссылку «скачать» у нас должен сливаться файлик в формате *.doc с заголовком и текстом нашей страницы.P.S.: Если есть какие-то глюки, прошу строго не судить… :)
Комментарии: 7
                И созданный таким образом файл корректно открывается для редактирования?            
                    
                Не безопасно. Таким образом можно скачать любые страницы, а не только те, что укажете, просто заменив ?rid в адресе.            
                    
                БлагоДарю! Добавил параметры «folders» и «parents»…            
                    if($parents=='') вызовет замечание, что такой переменной не существует, если она не передана в сниппет. Правильнее писать:
$parents = $modx->getOption('parents', $scriptProperties, '');
$folders = $modx->getOption('folders', $scriptProperties, 0);            
                Понял, БлагоДарю!            
                    
                Чего только не бывает. Из doc в pdf случаем не существует, а то вот понадобилось?            
                    
                Другое, но подобное уже есть Save2Page. Правда у меня она работала криво и я не впечатлился, но факт наличия не скрыть =)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.