0

答えを探して探しましたが、まったく運がありませんでした。

4 つの選択があるフォームがあり、最初の選択のみが必要です。これらの選択には、動的依存ドロップダウン メニューを作成するためにデータベースからプルする JS スクリプトによって設定されたオプションがあります。問題は、「選択されていない」選択でパラメーターを URL に渡し、クエリ文字列を長く複雑にしたくないことです。さらに、「選択されていない」選択がデフォルト値を渡すと、URL に「選択 + グループ」として表示される「グループの選択」のようなものになります。リンクをコピー/保存できるように、必ずGETを使用したいと思います。Select 値を条件付きで追加し、JS スクリプトによるオプションの入力を妨げないようにするにはどうすればよいですか?

たとえば、現在の典型的な URL は次のとおりです。

mydomain.com/bn/products?Division=1&Group=Select+Group&Segment=Select+Segment&Category=Select+Category

.htaccess と RewriteRule で使用する URL を以下に示します。

mydomain.com/bn/products/1

Group、Segment、Category が選択されていないため、それらの値のペアによって URL が不必要に混乱しています。

任意の提案をいただければ幸いです。

より詳しい情報

ここに投稿するのは初めてで、長いフォローアップをどこに追加すればよいかわかりません。ここに行きます:

選択内容に基づいて、JS を介して新しい URL をインターセプトして生成するというアイデアが気に入っています。私が抱えている問題の 1 つは、フォームによって URL が作成される方法です。

mydomain.com/bn/products?Division=1

少し背景が参考になるかもしれません。コンテンツ変数を使用して、データベースからページ コンテンツを取得しています。サイトのホームページを除くすべてのコンテンツは、コンテンツ ディレクトリ (/bn) に表示されます。上記のリンクで何が起こっているかというと、コンテンツ変数は既に設定されていますが (製品)、フォームは配置されていますか? コンテンツ変数の後。URL が正しく記述されている場合に機能する単純な RewriteRule を次に示します。

RewriteRule ^bn/products/([0-9-]+)$ /bn/index.php?content=products&Division=$1

次の URL を使用して選択内容にアクセスできます: mydomain.com/bn/products/1書き換え規則に準拠しているためです。同様に、従来の: を使用してそこに到達できます mydomain.com/bn/index.php?content=products&Division=$1

ここで、私は JS と jQuery の経験が非常に限られている PHP の専門家であることを告白しなければなりません。Shomz は onsubmit="my_submit_function(); return false;"、my_submit_function で select の値を確認し、 var divValue = $('#Division').val()それを URL に追加できることを示唆しています。私が知らないのは、生成された URL を送信する方法です。明らかに、URL を「わかりやすい」形式にしたいと考えています mydomain.com/bn/products/1。誰かがそこに洞察を提供できますか?

どうもありがとう。

アップデート

フォームによって作成された URL を、JS 条件によって生成された URL に置き換える関数を作成しました。まず、フォームトップは次のとおりです。

<form action="" onsubmit="my_submit_function()" method="get" name="DDm" id="DDm">

次に、私の選択の1つ:

<select id="Division" name="Division" onchange="Division_reload(this)">
  <option selected><?php echo $division; ?></option>
</select>

ダイナミック ドロップダウン メニュー スクリプトに onchange 要素が追加されました。これが問題の原因になっている可能性はありますか?

私の機能:

function my_submit_function() {
  var DDmURL = $reqURL;
  var divVal = document.getElementById('Division').value;
  var grpVal = document.getElementById('Group').value;
  var segVal = document.getElementById('Segment').value;
  var catVal = document.getElementById('Category').value;

  if ((divVal != $division) || (divVal != -1)) {
      DDmURL += '/'+divVal; }
  if ((grpVal != $group) || (grpVal != -1)) {
      DDmURL += '/'+grpVal; }
  if ((segVal != $segment) || (segVal != -1)) {
      DDmURL += '/'+segVal; }
  if ((catVal != $category) || (catVal != -1)) {
      DDmURL += '/'+catVal; }
window.location = DDmURL;
};

PHP 変数 ($division など) は、"Select Division" のようなデフォルト値であることを言及しておく必要があります。また、上記の JS コードを簡略化するために、php の開始タグと終了タグの表示を省略したことにも言及しておく必要があります。タグはありますが、表示されていません。

ドロップダウンを使用して Division から選択すると、以前と同じ URL が表示されます。

mydomain.com/bn/products?Division=1

これが期待どおりに機能しない理由はありますか?

解決済み

Shomz へのコメントで述べたように、PHP 変数を引用符で囲んでいなかったため、問題が発生し、コンソールにエラー メッセージが表示されていました。それを変更すると、すべてが期待どおりに機能します。

みんなの助けに感謝します。

4

2 に答える 2

0

これらの「選択+グループ」を表示しないようにするには、それらのオプションにゼロまたは適切な値を割り当てます。(ただし、次の段落を実行した後は必要ありません)

それらの送信を完全に防ぐにはonsubmit、フォーム送信機能をオーバーライドする関数を作成し、最初に選択したオプションのみに基づいて新しい URL を生成し、その後でリダイレクトします。選択されていない要素を DOM から完全に削除し、後でフォームを送信することもできます。どちらを選択しても、HTML 部分は次のようになります。<form method="GET" action="your_url" onsubmit="my_submit_function(); return false;">

アップデート

あなたが提供した追加情報に基づいて、あなたが望むだけフレンドリーな URL を構築できると言えます。決して制限されません。ifPHP と同じようにorswitchステートメントを使用できます。例えば:

var url = siteRoot;

if (divValue == "someUglyProductsValue")
   url += '/products';
else if (divValue == "someUglyOtherValue")
   url += '/other';

if (groupValue == "someUglyWhateverValue")
   url += '/whatever';

mydomain.com/bn/products/whateveretc...これは、またはmydomain.com/bn/otherまたはmydomain.com/bn/other/whatever...のようなものを与えることができます

window.location = url;必要な方法で URL 全体を作成したら、ブラウザーをリダイレクトするのと同じくらい簡単なことを行うことができます。

于 2013-06-17T22:50:52.743 に答える
0

コードの一部を共有すると、より簡単になります。

私の考えは、フォームを変更しながら動的にターゲット URL を生成することです。そのため、不要な選択の 1 つが選択解除されると、URL のその部分も削除されます。

次に、ターゲットの PHP ページで isset($_GET['something']) を使用して、これらの要素がチェックされているかどうかを確認します。

于 2013-06-17T22:58:04.893 に答える