0

私は、concrete5 を使用してアドオン モジュール contact_directory を購入しましたが、要件に合わせてカスタマイズする必要があります。

そのため、ファイル packages\contact_directory\blocks\contact_directory\view.php を変更する必要があります。view.php ファイルと同じディレクトリに test.php ファイルを作成したので、フォーム タグは url('contact_directory/test')? >">

どこが間違っているのか教えてください。

4

1 に答える 1

3

Concrete5 は、ブロックに緩い MVC アーキテクチャを利用します。これが意味することは、特定の URL が訪問されたときに実行されるファイルがある「普通の」php サイトとは異なり、代わりにブロックのコントローラーが常に呼び出されるということです。しかし、コントローラーには異なる URL に応答するさまざまな関数を含めることができます。C5 の世界では、これらはアクションと呼ばれます。

したがって、ブロックの view.php ファイルで、フォーム タグを次のように変更します。

<form method="post" action="<?php echo $this->action('test'); ?>">

次に、controller.php ファイルで、「action_」という名前の後にフォーム タグに渡した内容が続く新しいパブリック関数を作成します。あなたの例では、それは次のようになります。

public function action_test() {
    //do stuff here
}

Concrete5 ブロックは常に"view.php" テンプレートをレンダリングするため、問題が発生します (たとえば、代わりに "test.php" ファイルを使用するように指示する簡単な方法はありません)。ここでの最も簡単な解決策は、2 つのテンプレートを「if」ステートメントを使用して view.php ファイルに結合することです。例えば:

<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>

<?php if ($controller->getTask() == 'test'): ?>

    <!-- Put all of the code from your test.php file here -->

<?php else: ?>

    <!-- Put all the code from your view.php file here -->

<?php endif; ?>

1 つの注意点 - ブロックがページの既定値またはグローバル エリア (またはスタック) に配置された場合、フォーム アクションが適切な場所に送信されない可能性があります。これについてはよくわかりませんが、これはバージョン 5.4.2 で遭遇した問題でしたが、それ以降は修正されている可能性があります。

追伸 - このフォーム処理を C5 ブロックで使用するサンプル コードを見たい場合は、無料のメーリング リスト サインアップ アドオン ( http://www.concrete5.org/marketplace/addons/email-list-signup ) をダウンロードしてください。

于 2012-07-24T23:03:44.517 に答える