Сниппет конвертирования из 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. Правда у меня она работала криво и я не впечатлился, но факт наличия не скрыть =)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.