複数のテレビで検索を行う

はじめに-小さな余談。 最近、彼らは私に職場で不動産業者のサイト用にアパートの小さなデータベースを作成するように指示しました。 はい。一度に5つのパラメーター(都市、地区、部屋数、レイアウト、価格)のアパートメントを検索できました。 もちろん、これはすべて管理パネルに組み込まれ、もちろん簡単に編集できます。 しかし、私はさまざまなCMSで働いていたと言わなければなりません-高価で重いBitrixから自作のシンプルで気取らないエンジンまで、そして最後にMODxを選択しました-広告のためにカウントしないでください1週間(つまり、単純な企業Webサイト)、MODxは1日で静かに行われます。



私はこれを何のために書いていますか? ほとんどすべてのCMSで、このタスクを実装するには、追加のコードを記述し、すべての可能な方法ですべてを行う必要があります。 MODxでは、これは標準のエンジンツールのみを使用して解決され、「ペン」で記述する必要があるのは検索フォーム自体のみです。 それは明らかではありません(ドキュメントをざっと調べなければなりませんでしたが、気づきました)-それはすべて有用です。



そのため、タスクは次の段階に分けられます。

  1. 検索するプロパティのテレビを作成します。

    検索結果を表示するためのテンプレートとロジックを定義します。

    検索フォーム自体を作成します。

    MODxに精通している人には、テレビとは何かを説明する理由はないと思います。 私が今まで見た中で最も近いものは、Bitrixの情報ブロックプロパティです。 まったく同じものではないかもしれませんが、この場合の構築ロジックは同様に使用できます。



    意味的には、私たちのアパートのデータベースは、パブリケーションを含むコンテナになります(混乱が生じないように、ドキュメントの別のグループに割り当てられます)。 1つのアパート-1つの出版物、およびこの場合のアパートに関する各出版物のTVパラメーターは、これらの同じプロパティの役割を果たします。 このようなもの:



    文書構造

    出版物のプロパティ



    アパートで出版物を編集するとき、ここでそのような美しさを得るために、「リソース管理」->「パラメータ(TV)」に移動し、各パラメータに対して次のようなドロップダウンリストを設定します。



    パラメータを設定します



    はい、可能な値の区切り文字は「||」であり、デフォルト値は念のため空です。



    次に、サイトのルートに新しいドキュメントを作成します。 私たちはそれを「検索」のようなものにしたいと思っています。 そして、独自のスニペットを作成してあらゆる種類の倒錯を行う代わりに、標準で非常に強力なDittoの魔法を使用します。 文書の本文に次を挿入します。



    [!Ditto? &tpl=`Apartments` &startID=`52` &filter=`tvrooms,@EVAL return $_POST['rooms'];,1|tvcity,@EVAL return $_POST['city'];,1|tvregion,@EVAL return $_POST['region'];,1|tvplan,@EVAL return $_POST['plan'];,1|tvcost,@EVAL return $_POST['cost'];,1` &noResults=`, .`!]







    この呼び出しを行う理由を見てみましょう。



    &tpl = `Apartments`-見つかったパブリケーションを出力するためのテンプレートを含むチャンクを呼び出す方法を定義します。 Dittoの通常のチャンクは、作成方法を個別に言う必要はないと思います。



    &startID = `52`-選択が行われるパブリケーションコンテナのID。 この場合、スクリーンショットでわかるように、これは52です。



    &filter = `tvrooms、EVAL return $ _POST ['rooms'];、1 ...は最も魔法のようなものです。 これは、ご想像のとおり、不要な値を除外し、必要な値を選択するフィルターです。 引用されたロジックでは、これは次のとおりです。 「TVパラメータroomの値がスーパーグローバル配列$ _POSTのphp変数roomの値と等しくないすべてのドキュメントを除外します



    つまり、コンマで区切られた3つの引数があります。 1つ目は、フィルタリングに使用するパラメーターです(TVパラメーターの場合は、名前にtvを追加してこれを示します)。 2番目はパラメーターの値です。 この場合、 EVAL呼び出しを使用して、$ _POSTから変数を直接参照してPHPコードを実行します。 3番目のパラメーターは、パラメーターと値を接続する論理演算子へのポインターです。 単位とは、「等しくない」という意味です(これについては、 こちらを参照してください )。 実際、このようなフィルタリングルールは、論理「OR」に対応する「|」記号を使用して組み合わせることができます。 すべてのTVパラメーターを1つのフィルターに結合するために行っていること。



    ところで、TVパラメータの名前と$ _POSTの変数の名前は同じになっていることに注意してください。 これは便宜上のものであるため、混乱はありません。



    そして最後に、ドロップダウンリストを呼び出す検索フォームを使用してチャンクを作成します。 -はい、はい、テレビのパラメーターと同じです。 パラメーターを設定するときと同じようにオプション値を書き込みます(これが自動的に行われる方法を見つけようとしましたが、確かに試してみます)。 そして、formタグのaction属性で、Dittoへの呼び出しで検索ページのURLを指定します。 必要に応じてチャンク、たとえばSearchFormを呼び出し、{{SearchForm}}を呼び出して検索するすべてのページに挿入します。 出来上がり!



    この方法により、PHPコードを1行も記述せずに、高度なパラメーターを使用してバインディングと検索フォームを作成できます。 お楽しみください!



All Articles