MODX - 在页面上进行多个片段调用,返回不同的输出

时间:2009-12-07 21:35:31

标签: modx

我创建了一个片段,从数据库表中提取数据并以表格格式显示。该片段将id作为参数,并将其添加到sql查询中。

我的问题是,如果我在同一页面上有超过1个片段调用(有时需要页面上显示的不同id的表格数据),则所有表格数据都与最后一次数据库调用相同最后一段摘录。

如果不缓存片段数据库调用并让它们都显示自己的内容,我需要做些什么?

我已尝试将页面设置为无缓存。也用[! !]用于片段调用的括号,甚至使用了function_exists()方法,但它们都没有帮助。

有人可以帮助我吗?

感谢

3 个答案:

答案 0 :(得分:0)

在代码段的末尾试试这个:

mysql_connect('host', 'user', 'pass');
mysql_select_db('db_name');

您需要指定课程的连接参数。

答案 1 :(得分:0)

如果您可以发布您的代码段,将有助于回答。我通过页面上的多个调用执行此操作而没有问题,因此代码段内部存在任何错误,或者您需要输出到唯一的占位符名称。

答案 2 :(得分:0)

您遇到了ModX的故障,我花了很长时间才解决。 ModX通过使用散列进行了大量的缓存,显然,当在一个页面内分割多个片段的多个连接时,可以看到这种不稳定的行为。这很可能是非常不受欢迎的行为,它可以很容易地解决,但除此之外会让你头疼。

一个sympton是$modx->getObject($classname, $id)返回null(经常)。

解决方案非常简单: 要么使用带有单个数据库实例的静态类,要么使用 使用$modx->setPlaceholder($instance, $tag);或其组合。

我的解决方案是:

class dt__xpdo {

  private function __construct() {}

  public function __destruct() {
    $this->close();
  }

  static public function db($modx = null) {

    if ($modx->getPlaceholder('dt_xpdo') == '') {
      $dt_user   = 'xxxxxxxxx';
      $dt_pw     = 'xxxxxxxxx';
      $dt_host   = 'localhost';
      $dt_dbname = 'xxxxxxxxx';
      $dt_port   = '3306';

      $dt_dsn = "mysql:host=$dt_host;dbname=$dt_dbname;port=$dt_port;charset=utf8";

      $dt_xpdo = new xPDO($dt_dsn, $dt_user, $dt_pw);

      $dt_xpdo->setPackage('mymodel', MODX_CORE_PATH.'components/mymodel/'.'model/', '');

      //$modx->log(modX::LOG_LEVEL_DEBUG, 'mymodel.config.php');
      //$modx->log(modX::LOG_LEVEL_DEBUG, 'Could not addPackage for mymodel!');

      $modx->setPlaceholder('dt_xpdo', $dt_xpdo);
    }

    return $modx->getPlaceholder('dt_xpdo');
  }
}

现在您可以在代码中使用:

require_once 'above.php';

并使用类似

的内容

$xpdo = dt__xpdo::db($modx);

继续完美无缺!