2014-09-13 6 views
0

Я бы хотел передать текущий URL-адрес страницы в качестве атрибута для XSL-шаблона. Насколько я понял, он должен быть передан как параметр, а затем использован как атрибут.Пропустить URL-адрес в качестве параметра XSL

Я использую PHP для загрузки XML & XSL файлов:

<?php 
$xml = new DOMDocument; 
$xml->load('main.xml'); 

$xsl = new DOMDocument; 
$xsl->load('blocks/common.xsl'); 

$proc = new XSLTProcessor; 

$proc->importStyleSheet($xsl); 

echo $proc->transformToXML($xml); 
?> 

Как следует этому код может быть изменен, чтобы передать URL в качестве параметра с именем «текущая URL», например?

Я видел много подобных вопросов здесь с различными решениями, но пока никто не работал на меня. Заранее спасибо.

ответ

1

Может быть, вы уже пробовали этот подход, но в случае, если нет:

<?php 

    $params = array('current-url' => $_SERVER['REQUEST_URI']); 

    $xml = new DOMDocument; 
    $xml->load('main.xml'); 

    $xsl = new DOMDocument; 
    $xsl->load('blocks/common.xsl'); 

    $proc = new XSLTProcessor; 
    $proc -> registerPHPFunctions(); 
    $proc->importStyleSheet($xsl); 

    foreach ($params as $key => $val) 
    $proc->setParameter('', $key, $val); 

    echo $proc->transformToXML($xml); 
    ?> 

В XSL, добавьте выше шаблоны

<xsl:param name="current-url" /> 

В шаблонах, вы можете получить значение с помощью

<xsl:value-of select="$current-url" /> 

Если вы еще не сделали этого, вы должны добавить xmlns:php="http://php.net/xsl" в xsl: stylesheet dec бъявлению.
Для справки: registerPHPFunctions() и решение, которое вы, возможно, уже проверили на SO: Passing variables to XSLT

+0

Thank you matthias_h. Пробовал это прямо сейчас, но я получаю «Вызов функции-члена setParameter() для объекта non-object' в строке 28, который является' $ xsltProcessor-> setParameter ('', $ key, $ val); 'Невозможно определить это, у вас есть идеи? –

+0

только что обновили ответ - была ошибка копирования/вставки. он должен быть $ proc-> setParameter (... вместо $ xsltProcessor-> setParameter (.. –

+0

Спасибо, это сработало. –

Смежные вопросы