Создать документ MS Word в Joomla - PullRequest
2 голосов
/ 21 августа 2011

Что я пытаюсь выполнить:

  1. Администратор создает документ MS Word с заполнителями, которые будут заполнены данными из базы данных Joomla
  2. Администратор загружает файл MS Word в Joomla и подключает егос оператором SQL
  3. Пользователь выполняет функцию «Создать MS Word» и получает документ MS Word, заполненный данными из базы данных.

Есть ли для Joomla какие-либо компоненты, которые это делают?Я сделал это в своем приложении, используя библиотеки Interop.

1 Ответ

0 голосов
/ 24 августа 2011

недавно я сделал это для компонента joomla, используя библиотеки phpdocx и pclzip, где файл * .docx генерируется из файла шаблона.

Config:

$params         = Object with form data;    // data from requeest
$template       = 'xml_file_name';          // jfrom xml file name and *.docx template file name
$pl             = '#';                      // place holder prefix & suffix: (example: #PLACEHOLDER#)
$date_placehold = '#DATE#';                 // will be replaced with current date
$date_formt     = 'F j, Y';                 // php date format
$template_path  = JPATH_COMPONENT_SITE .DS.'templates'.DS.$template.'.docx';
$temp_dir       = JPATH_ROOT.DS.'tmp'.DS.'phpdocx-temp-dir';    // + write access
$output_mime    = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
$filename       = $params->first_name .' - '. $params->second_name.'.docx';

// get names of all form fields of type 'list' from xml file
$lists      = (array) ComponentHelper::getJFormLists($template);
// get all field names from the xml file
$fields = (array) ComponentHelper::getJFormFieldsNames($template);

Инициализировать переменные:

$doc =& JFactory::getDocument();
$doc->setMimeEncoding($output_mime); 

// require phpdocx class
require_once(JPATH_COMPONENT_ADMINISTRATOR . DS . 'helpers'.DS.'pclzip.lib.php');
require_once(JPATH_COMPONENT_ADMINISTRATOR . DS . 'helpers'.DS.'phpdocx.php');

$phpdocx = new phpdocx($template_path, $temp_dir);

связать поля формы с пользовательскими параметрами:

foreach($params as $field => $value)
{
    if(array_key_exists($field,$lists) && is_array($lists[$field]) && array_key_exists($value, $lists[$field]) )
    {
        // if the field is JFormInput with type "list" its value is not important but its label
        $var = $lists[$field][$value];
    } else {
        $var = $value;
    }

    // use openxml carriage return on new lines
    if(strpos($var, "\n")) {
        $var = str_replace("\n", '<w:br/>', $var);
    }

    $fields[$field] = $var;
}

поля формы заявки foreach:

foreach($fields as $field => $value)
{
        // replace placeholder with form value
        $phpdocx->assign($pl.strtoupper($field).$pl, $value);
}

// assign date for filled-in applications
if(!empty($date_placehold)
{
    $phpdocx->assign($date_placehold, date($date_formt));
}

вывести файл:

$phpdocx->stream($filename, $output_mime);

return true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...