Exemplo n.º 1
0
/**
 *
 * обработка xml xsl'ем
 * @param str $xsl_file
 * @param str $root_node_name
 * @param array,str,c_xml $dta - можно передать массив (тогда обязательно задать $root_node_name), строку с xml-данными, c_xml
 * @param bool $is_debug
 * @param array $params
 * @param array $keys_as_params
 * @param bool $kill_doctype
 */
function xsl_out($xsl_file, $root_node_name, $dta = array(), $is_debug = false, $params = array(), $keys_as_params = array(), $kill_doctype = true)
{
    global $o_global;
    if (!isset($params['res_site_url'])) {
        $params['res_site_url'] = $o_global->res_site_url;
    }
    if (!isset($params['res_engine_url'])) {
        $params['res_engine_url'] = $o_global->res_engine_url;
    }
    if (!isset($params['current_url'])) {
        $params['current_url'] = $o_global->current_url;
    }
    if (is_object($dta)) {
        $xml = $dta->toXML();
    } elseif (is_array($dta)) {
        $xml = c_xml::arrayToXML($root_node_name, $dta);
    } else {
        $xml = $dta;
    }
    $res = '';
    if ($is_debug || $_REQUEST['debug_xsl'] > 0 && _GL_DEBUG === true || $_REQUEST['debug_xsl'] === $xsl_file && _GL_DEBUG === true) {
        $_REQUEST['debug_xsl'] = $_REQUEST['debug_xsl'] - 1;
        //можно дебажить до определённого уровня
        $res .= '<B>File: "' . $xsl_file . '"</B><BR/>';
        if (!empty($params)) {
            $res .= '<U>Params</U>:<BR>';
            foreach ($params as $k => $v) {
                $res .= "<B>{$k}</B>={$v}<BR>";
            }
        }
        $res .= c_xml::dump($xml);
        $save_to = _PMP_ROOT . '/tmp/xml_dump.xml';
        $fp = @fopen($save_to, 'w');
        if ($fp !== false) {
            @fwrite($fp, $xml);
        }
        @fclose($fp);
    }
    $res .= c_xml::transform($xsl_file, $xml, $params);
    if ($kill_doctype) {
        $res = preg_replace("/^\\<!DOCTYPE.*\\.dtd\"\\>/i", '', $res, 1);
    }
    return $res;
}