【问题标题】:Snippet not working in MODx代码段在 MODx 中不起作用
【发布时间】:2012-07-20 12:46:10
【问题描述】:

我的 ModX Evo 中有一个 sn-p。问题是,在我的本地这个 Shippet 工作正常,但是当我将它上传到主机时,它只返回空白。代码是一团糟,但我需要弄清楚这一点。有什么想法吗?谢谢。

    <?php
$action=$_GET['action'];

switch ($action){
case('add'):_add();break;
case('view'):_view();break;
case('order'):_order();break;
case('del'):_del();break;

}
/////////////////////////////////////////////////////////////////
function _add()
{
global $modx;
session_start();
if(!session_is_registered('things')){session_register('things');}
$ar=$_SESSION['things'];
$ar_size=sizeof($ar)-1;
$break=false;
$i=0;
if($ar_size>=0)
 {
  while ($i<=$ar_size):
  $buf=$ar[$i];
   if($buf['id']==$_GET['thing']){$_SESSION['things'][$i]['count']=$buf['count']+1;$break=true;}
  $i++;
  endwhile;
 }
if($break==false){
$_SESSION['things'][($i)]=array('title' => $_GET['title'],
'id'=>$_GET['thing'],
'price'=>$_GET['price'],
'count'=>1);}
$modx->sendRedirect("/index.php?id=".$_GET['return']);


}
function _view()
{
if (!isset($_GET['zakaz'])){

session_start();
if(!session_is_registered('things')){session_register('things');}


if (isset($_GET['del']))
{
$buf=array();
$ar=$_SESSION['things'];
$ar_size=sizeof($ar)-1;
if($ar_size>=0)
 {  
  $i=0;
  while ($i<=$ar_size):   
    if(($i+1)!=$_GET['del']){$buf[sizeof($buf)]=$ar[$i];}
    $i++;
   endwhile;

}
$_SESSION['things']=$buf;

}
if (isset($_GET['delall']))
{
$_SESSION['things']=array();
}
if (isset($_GET['cn']))
{
$c=$_GET['cn'];
$ar=$_SESSION['things'];
$ar_size=sizeof($ar)-1;
if($ar_size>=0)
 {  
  $i=0;
  while ($i<=$ar_size): 
    $b=(int)$c[$i];
    if($b>0)
       {
        $ar[$i]['count']=$b;
       }else{$ar[$i]['count']=1;}
    $i++;
   endwhile;
}
$_SESSION['things']=$ar;

}

if((isset($_GET['peresh']))or(isset($_GET['del']))or(isset($_GET['delall'])))
{
global $modx;
$modx->sendRedirect("/index.php?id=10&action=view");

}
?>
<form action='index.php' method='GET'>
<input type="hidden" value="10" name="id">
<input type="hidden" name="action" value="view">
        <table border=0 cellpadding=4 cellspacing=2 width='100%'>
        <tr align='center'>
        <td align=center colspan=5 bgcolor='#c5dcf8' class='table_title'>Ваша корзина</td>
        </tr>
        <tr align='center'>
        <td bgcolor='#c5dcf8'>№</td>
        <td bgcolor='#c5dcf8' >наименование товара</td>
        <td bgcolor='#c5dcf8'><nobr>цена, руб.</nobr></td>
        <td bgcolor='#c5dcf8'>кол-во</td>
        <td bgcolor='#c5dcf8'>удалить</td>
        </tr>

<?php
$ar=$_SESSION['things'];
$ar_size=sizeof($ar)-1;
$break=false;
$i=0;
if($ar_size>=0)
 {
  $summ=0;
  while ($i<=$ar_size):
  $buf=$ar[$i];
   $i1=$i;
   $i++;
   $name=$buf['title'];
   $id=$buf['id'];
   $price=$buf['price']*$buf['count'];
   $summ=$summ+$price;
   $count=$buf['count'];
   echo"<tr><td bgcolor=\"white\" style=\"color:black;\" align=\"center\">$i</td><td bgcolor=\"white\"style=\"color:black;\" align=\"center\">
<a style=\"color:blue\" href=\"/index.php?id=$id\">$name</td><td bgcolor=\"white\"style=\"color:black;\" align=\"center\">$price</td>
<td bgcolor=\"white\" style=\"color:black;\" align=\"center\"><input type=\"edit\" name=\"cn[$i1]\" value=\"$count\"SIZE=\"4\"></td>
<td bgcolor=\"white\" style=\"color:black;\" align=\"center\"><a href=\"/index.php?id=10&action=view&del=$i\" onclick=\"return confirm('Вы согласны?')\"><font color=\"Maroon\" style=\"color:Maroon;font-weight:bold;font-size:16px;text-decoration:none;\">X</a></td></tr>";
 endwhile;
?>
<tr><td colspan="2" align="right" bgcolor="white"><b style="color:navy">Итого к оплате:</td><td style="color:blue;"bgcolor="white" align="center"><?php echo $summ; ?></td><td align="center"><input name="peresh" style="font-size:10px" type="submit" value="Пересчитать"></td><td align="center"><input style="font-size:10px" name="delall" type="submit" onclick="return confirm('Вы согласны?')" value="Удалить все">
</table><br><center><input type="submit" name="zakaz" value="Оформить заказ"></center></form>

<?php
 }
else
{
?>
<tr><td colspan="5" align="center" valign="middle" height="60" style="color:blue" bgcolor="white">Корзина пуста</td></tr>
</table></form>

<?php
}
}
else
{
//////////////////////для заказа////////////////////////

}
?>

<?php
}

【问题讨论】:

    标签: modx modx-evolution


    【解决方案1】:

    你应该把你所有的功能放在:

    如果 (!function_exists('yourfunction')) { [....]

    编辑:你的 sn-p 在本地 modx 安装中工作吗?或者它是否像普通的 php 脚本一样工作?我不认为你可以停止/启动 php (?> 和

    您可以在 Modx 中检查您的错误日志。如果显示空白错误可能会被关闭

    【讨论】:

    • 你绝对不能像那样打开/关闭 php 标签。片段必须包含 100% php,并且要么返回输出(将出现在放置 sn-p 标记的位置),要么将其发送到占位符。
    • 对不起,回答迟了.. 发现问题是使用别名时 GET 参数 dissapear。尝试为此使用 htaccess,但它破坏了所有站点。
    【解决方案2】:
    根据文档,

    session_register() 和 session_is_registered() 在 PHP 5.3 中已弃用并在 PHP 5.4 中删除。我肯定会把它拿出来。

    正如 OptimusCrime 所说,您不能在 sn-ps 中使用 &lt;?php?&gt;;整个 sn-p 将在解析时进行评估,这样做会导致解析错误。可能会在错误日志中找到一些证据。

    此外,所有对 session_start 的引用确实不应该存在 - MODX 会为您处理会话,您不应该再次重新启动它们。我不确定这是否会导致问题,但如果有的话,它可以帮助清理你的代码,哪怕只是一点点;)

    【讨论】:

    • 感谢提示,但我知道这些功能已被弃用。服务器在共享主机上运行 php 5.2.1。 session_register() 也只是将额外的键添加到现有的会话数组中。
    • 如果有什么喜欢在不告诉你的情况下升级PHP,那就是共享主机……我自己被那个咬了几次。 ;) 现在我再看一遍,答案似乎也吃掉了&lt;??&gt;..
    猜你喜欢
    • 2019-12-11
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多