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 ) をダウンロードしてください。