1

データベース テーブルからデータを取得して表形式で表示するスニペットを作成しました。このスニペットは ID をパラメーターとして受け取り、これが SQL クエリに追加されます。

私の問題は、同じページに複数のスニペット呼び出しがある場合 (ページに表示されるさまざまな ID の表形式のデータが必要になる場合があります)、すべてのテーブル データが最後のデータベース呼び出しと同じになることです。スニペット。

スニペット データベース呼び出しをキャッシュせずに、すべて独自のコンテンツを表示するにはどうすればよいですか?

ページをキャッシュ不可に設定しようとしました。[! !] スニペット呼び出しのブラケット、さらには function_exists() メソッドを使用しましたが、どれも役に立ちませんでした。

誰か助けてください。

ありがとう

4

3 に答える 3

0

スニペットを投稿していただけると回答に役立ちます。問題なくページ上で複数の呼び出しを行ってこれを行うため、スニペット内に何か問題があるか、一意のプレースホルダー名に出力する必要があります。

于 2010-02-02T09:06:10.500 に答える
0

スニペットの最後でこれを試してください:

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

もちろん、接続パラメータを指定する必要があります。

于 2009-12-21T03:52:45.387 に答える
0

ModX の不具合に遭遇しましたが、解決するのに長い時間がかかりました。ModX はハッシュを使用して多くのキャッシングを行い、明らかに、複数のスニペットに分割された 1 つのページ内から複数の接続が行われると、この不安定な動作が見られます。これは非常に望ましくない動作である可能性が高く、簡単に解決できますが、そうしないとひどい頭痛の種になります。

症状の 1 つは、$modx->getObject($classname, $id)(多くの場合) null を返すことです。

解決策は非常に簡単です。単一の db インスタンスを持つ静的クラスを使用するか、 を使用する$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);

そして完璧に続けてください!

于 2017-08-20T16:36:16.710 に答える