2011-07-02 84 views
4

我需要在我的頁面的側邊欄中顯示部分暴露的表單,並在$content區域中顯示錶單和內容的其餘部分。我真的沒有什麼好辦法可以做到這一點。我以某種方式讓它顯示出來,通過使用「暴露形式」設置「塊」視圖,然後試圖僅通過.tpl文件顯示我需要的部分。問題是,當點擊提交按鈕(提交按鈕位於$content區域)時,則不考慮邊欄中的過濾器。Drupal的意見 - 分裂暴露的形式可能嗎?

+0

正在使用JavaScript的一個選項? – bjudson

+0

不,不是。我想嘗試使用服務器端方法來做到這一點。 – Matthew

+2

我不是100%肯定的,但我認爲你必須爲這樣的事情寫一個自定義模塊,或者完全從視圖中移除,或者相當大地修改它的行爲。 – bjudson

回答

5

一些橫向思維...爲什麼不探索僅CSS選項?您可以將該表單元素與position:absolute一起玩?或者(考慮是右側欄)float:right,然後一些負右邊距將其推送到邊欄?如果您正在使用960網格系統,請使用pullpush課程。

0

從上面的解釋我假設你在塊和內容區域打印相同的表單,並且你隱藏page.tpl中的表單的一部分,如果這是真的,那麼你可以在你的自定義中使用hook_form_alter()模塊然後

  1. 將表單元素的值(存在於塊中)存儲在全局變量中。
  2. 現在使用該全局變量並設置表單元素(存在於內容區域中,此表單元素對用戶不可見)。如果你實現了其他方式

提供更多信息。

問候, Chintan。

0

如果你使用類似context你可以得到暴露過濾器阻塞在同一頁面中顯示的兩倍。然後,您可以使用CSS隱藏每個表單中不想顯示的字段。

您遇到的基本問題是,有在不同的地方有兩種形式,他們會每個人都有自己的表單元素 - 被觸發時提交,只有相同的形式元素中的表單字段發送。您需要將它們移動到一個表單中,或者依靠JavaScript來從兩種表單中收集字段並構建帖子。

0

這裏有一個相關的問題: https://drupal.stackexchange.com/questions/3827/multiple-copies-of-views-filter-form-exposed-filters 它描述瞭如何複製你的過濾器。但它看起來像一個醜陋的黑客。

有點清潔似乎#6提到的這個方法: http://drupal.org/node/641838#comment-3247748 沒有測試出來,但它看起來不錯。

它還是會給予你一些開銷(重複的觀點),但它可能是這樣使用視圖最簡單的方法。

在另一方面你可能會寫一個模塊,並建立自己的自定義過濾塊,掛鉤到您的視圖。這裏有一篇關於此的博客文章: http://www.hashbangcode.com/blog/creating-custom-views-filters-exposed-form-element-drupal-6-561.html

3

首先我要回答你的問題,然後我將解釋爲什麼你問錯了問題:

如果構建了formapi外的形式,你可能有一些運氣。這會變得更糟,並且需要你對諸如大規模分配之類的攻擊向量進行額外的關注。

views_some_view.tpl.php

<form name="input" action="/link/to/view" method="get"> 
    Country: <input type="text" name="country" /> 

my_custom_exposed_view.module:hook_block() 市:

這將使一個形式,在大多數情況下將其<form>開始,有一些輸入字段,然後有lot的隨機HTML,然後輸入一些字段然後關閉。

正如你可能知道,一個<input type="submit" value="Submit" />只會發佈form標籤就被封閉在的一切都在下面的HTML提交按鈕:

<form name="input_1" action="/link/to/view" method="get"> 
    Country: <input type="text" name="country" /> 
</form> 
<form name="input_2" action="/link/to/view" method="get"> 
    City: <input type="text" name="city" /> 
    <input type="submit" value="Submit" /> 
</form> 

將只發送City。這些不是你正在尋找的機器人。

這將需要一個大的形式,但由於form/form之間的所有內容都非常動態,並且包含大量的HTML,包括潛在的其他形式,所以這實際上並不是您想要的。此外:完全獨立於內容地控制塊外觀(示出/未示出)。您需要許多堅固的代碼才能確保塊a)在起始form標籤不存在時從不出現,並且b)該塊將保證在存在標籤form時顯示。否則,你不僅僅是無效的HTML,而是大多數情況下會導致頁面無法使用的破碎的HTML。

你根本不想在表格中填寫表格的一部分,而在內容中填寫其他部分。

但是,您希望它可視化就好像一個部分在身體中,其餘部分在側邊欄中。

好消息是,用HTML表示結構是獨立的。這就是你的解決方案所在。

  1. 給你的表單字段很好的ID和類。您可以使用hook_form_alter來更改現有表單,但您可能只是想自己爲整個表單創建HTML。主題層允許。
  2. 使用CSS按ID和位置挑出單個表單字段:將它們絕對放入正確的位置。或者通過CLASS和職位挑選出各個領域的類別:將它們相對於正確的位置。
  3. 做一個簡單的識別程序,允許向body-tag添加一個類。 (見下文)。
  4. 添加一些CSS來移動邊欄的下邊,當表單字段位於body-tag中時,爲表單字段的移動提供空間。

    <body class="<?php print $splitform ?>">

    function my_themename_preprocess_page() { 
        if ($GET['q'] == 'path/to/view') { 
        $vars['spliform'] = "splitform" 
        } 
    }
0

您可以創建塊作爲空的div並有從主網頁JavaScript和二級過濾器形式和其他任何你在那裏需要填充它。再次,您可以使用javascript將表單值從塊表單複製到提交時主窗體中的隱藏字段。這樣可以從一個地方爲您提供所需的全部控制(節點輸出)。唯一值得注意的是,它依賴於更多的JavaScript來將它們結合在一起。

相關問題