【问题标题】:XSLTFORMS: refresh model from URL?XSLTFORMS:从 URL 刷新模型?
【发布时间】:2023-01-30 00:49:20
【问题描述】:

我有一些动态 XML - 在 PHP 脚本中生成。 该脚本采用单个参数“p”——代表“pagenum”。 这个想法是显示分页数据 - 允许用户选择下一页/上一页数据。

我采用什么方法来使用新页面更新数据 - 我的屏幕是否有可能更新而必须通过 HTTP 重新加载页面?

这是我的主页的 sn-p - 基本上我正在使用新的 GET 参数重新加载整个页面。 (p=1,p=2 等)。 (可以看出,我的主页也恰好是 PHP - 但除了获取参数之外,我确实做了很多事情)。

<?php
    header('Content-Type: text/xml; charset=utf-8');
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
$p=1;
if (isset($_GET['p'])) {
    try { $p=(int)$_GET['p']; } catch(Exception $ex) { ; }
}
if (isset($_GET['debug'])) { $debug="yes"; } else { $debug="no"; }
?>
[...]

<xf:model>
    <xf:instance src="data.php?p=<?=$p?>"/>
</xf:model>

</head>
<body>


<xf:repeat ref="videos/video">
    <details>
        <summary>
            <span class="title"><xf:output value="title"/></span>
        </summary>
        <p>
            <xf:output value="description" mediatype="text/html"/>
        </p>
    </details>
</xf:repeat>

编辑:添加虚拟数据源以供参考。

<?php
    header('Content-Type: text/xml; charset=utf-8');
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
if (isset($_GET['p'])) { $p=(int)$_GET['p']; } else { $p=1; }

echo "<data xmlns=''>\n";
echo "<videos>\n";

switch ($p) {
    case 1:
        echo "<video><title>Macbeth</title></video><video>Malformed</video>";
        break;
    case 2:
        echo "<video><title>Hamlet</title></video><video>SPACE 2003</video>";
        break;
    case 3:
        echo "<video><title>Romeo And Juliet</title></video><video>Back to the Feature</video>";
    default:
        echo "<video/>";
}

echo "</videos>\n";
echo "</data>\n";
?>

【问题讨论】:

  • 好的 - 到达那里 - 我可以使用“提交”元素来更改 URL。我唯一需要解决的问题是如何替换 URL 中的查询参数。我想我需要使用“资源”属性 - 但我仍在研究如何将此与“替换”属性结合使用......一旦我有更多进展,我会更新。

标签: php xslt xforms xsltforms


【解决方案1】:

我得到了一些工作 - 不确定这是否是正确的方法。 发布以防对其他人有用 - 如果有人可以提出改进建议。 我放弃了在视图本身上使用 URL 参数的想法 - 相反,改变了模型以在实例本身的“元数据”部分中包含“pagenum”。

变形代码:

<?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?>
<?xsltforms-options debug="no"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xf="http://www.w3.org/2002/xforms"
      >
<head>

<model xmlns="http://www.w3.org/2002/xforms">
    <instance src="data.php" id="default"/>  

    <submission id="nextpage" method="get" replace="instance" instance="default" serialization="none">
        <resource value="concat('data.php?p=', metadata/pagenum + 1)"/>
        <message ev:event="xforms-submit-error">Cannot load!</message>
    </submission>

    <submission id="prevpage" method="get" replace="instance" instance="default" serialization="none">
        <resource value="concat('data.php?p=', metadata/pagenum - 1)"/>
        <message ev:event="xforms-submit-error">Cannot load!</message>
    </submission>
</model>

</head>
<body>

<p> Page : <xf:output ref="metadata/pagenum"/> </p>
<xf:submit submission="prevpage"><xf:label>prev</xf:label></xf:submit>
<xf:submit submission="nextpage"><xf:label>next</xf:label></xf:submit>

<xf:repeat ref="videos/video">
    <details>
        <summary>
            <xf:output value="title"/>
        </summary>
        <p>
            <xf:output value="description" mediatype="text/html"/>
        </p>
    </details>
</xf:repeat>

</body>
</html>

数据源:

<?php
    header('Content-Type: text/xml; charset=utf-8');
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
if (isset($_GET['p'])) { $p=(int)$_GET['p']; } else { $p=0; }

function as_xml($title,$description) {
    return sprintf("<video><title>%s</title><description>%s</description></video>",$title,$description);
}

echo "<data xmlns=''>
";
echo "<metadata><pagenum>".$p."</pagenum></metadata>
";
echo "<videos>
";

switch ($p) {
    case 0:
        echo as_xml('Macbeth','The Scottish Play') . "
";
        echo as_xml('Malformed','<b>Sci Fi Thriller</b>') . "
";

        break;
    case 1:
        echo as_xml('Hamlet','Something is rotten in the state of Denmmark') . "
";
        echo as_xml('SPACE 2003','XML <i>in space</i>') . "
";
        break;
    case 2:
        echo as_xml('Romeo and Juliet','Early Rom Com') . "
"  ;
        echo as_xml('Back to the Feature','Copyright avoidance.') . "
";
        break;
    default:
        echo "<video/>";
}

echo "</videos>
";
echo "</data>
";
?>

截屏:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多