0

Concrete 5 (5.4.0+) 用の新しいパッケージを作成しています。新しいブロックの挿入は完全に機能します。しかし、既存のブロックを編集すると、[保存] をクリックすると、UPDATE ではなく INSERT が再試行されます。

これに影響を与えるデータベースの 2 つのフィールドは、bID と eID です。どちらもnon-auto-incrementing INT(10) default none NOT NULLです。

値はコントローラーの連想配列$argsで渡され、親の保存メソッドを次のように呼び出していますParent::save($args);

ヘルプ/入力をいただければ幸いです。PS: ネットでこれを調べたところ、C5 フォーラムで、主にデータベース フィールドに関連するいくつかのことを試してみましたが、それでも上記のエラーが発生します。可能であれば、ADODB の save() メソッドを上書きしたくありません。

- - 編集 - -

おそらく、私はこれをすべて間違って見ています。私が達成しようとしていることを言わせてください。ブロックを複数回編集しても、eID が (たとえば) 37 のままである必要があります。bID は AFAIC からインクリメントできます。

編集時に eID を 37 のままにし、新しいインスタンスの作成時に 1 ずつ増やすにはどうすればよいですか? わかる?

2 番目のテーブルは eID フィールドを参照し、新しいインスタンスが作成されない限り、このテーブルのエントリの編集されたインスタンスは同じ eID を持つ必要があります。Sry - 私が知っている泥のように澄んでいます。

4

2 に答える 2

0

そこで、既存のパッケージを調べてこの機能を複製しました。私の質問は次のように進化しました。PHPコンクリート5変数をAdd.phpに渡す

ウサギに従ってください;)

于 2012-09-12T06:34:42.223 に答える
0

既存のブロックの新しいバージョンではなく、ページに表示されるブロックの新しいインスタンスを取得すると言っていますか? 通常、ブロックを編集すると新しいレコードが作成されるため、テーブルに新しいレコードが挿入されることに問題があるとは思いません。C5 は古いバージョンのブロックを保持します。

私が行ったカスタム ブロックでは、親の save メソッドを呼び出す必要はありませんでした。データを収集し、対応するデータベース フィールドを指定する編集フォームが必要なだけです。親コントローラーは、フォームが送信されたときにそれをどう処理するかを認識しています。

たとえば、ブロック テーブルに "firstname" という名前のテキスト フィールドを更新する場合、次のように edit.php ファイルに行を追加します。

<?php echo $form->text('firstname', $firstname, array('style' => 'width: 320px'));?>

私のブロック エディターには、ラベルを追加してフォームの見栄えを良くするための html/CSS 以外は、これ以外にはほとんど含まれていません。$form オブジェクトは他のすべてを処理します。

ブロックとブロック コントローラーを理解するのに本当に役立ったのは、「デザイナー コンテンツ」アドオンをダウンロードしてインストールしたことです。それは無料です。これを使用していくつかのカスタム ブロックを作成し、生成されたコードを見てさまざまな機能を実行できます。

于 2012-09-10T16:07:51.750 に答える