Hej!
Har problem med att konfigurera ett exponerat filter i Views. Fältet som filtret ska användas på är ett Datum i form av ett Unix Timestamp.
Problemet är att oavsett vilket datumintervall jag sätter visas inget resultat. Om jag tittar på SQL frågan som genereras av Views ser jag att datumen som används i WHERE delen inte är ett Unix Timestamp utan en sträng med formen "yyyy-mm-dd". Har satt upp ett likadant filter för när innehållet skapats och i det fallet omvandlas datumet till ett Unix Timestamp i SQL:n. Någon som varför det inte blir så i det första fallet? Kanske ska tillägga att i det första fallet gäller det ett datumfält som jag själv har lagt till för innehållstypen.
Mvh Markus
Har nu hittat en lösning på problemet. Det jag gjorde var att använda hook_views_data_alter för att sätta rätt filterhanterare för fältet.
function custom_module_views_data_alter(&$data) {
$data['table_name']['field_name']['filter']['handler'] = 'views_handler_filter_date'; return $data;
}Vet inte om det här är den bästa lösningen men den fungerar.
| Attachment | Size |
|---|---|
| filterinst.PNG | 23.54 KB |
| filtersql.PNG | 11.73 KB |
| fältinställningar.PNG | 3.86 KB |
Comments
Har du möjlighet att lägga
Har du möjlighet att lägga upp en skärmdump på hur ditt filter är inställt?
Är det ett intervall du ställt in? Större än [filter] och Mindre än [filter]?
//Pontus Nilsson, Digitalist
Hej! Ja, det är intervall
Hej!
Ja, det är intervall mellan två datum jag har ställt in. Har bifogat några skärmdumpar på filterinställningarna, sql:en och hur inställningarna för fältet ser ut. En sak som jag inte tycker borde ha någon betydelse men kanske ändå kan vara värd att nämna är att det här fältet tidigare lagrades som en datumsträng. Eftersom jag istället ville lagra det som ett Unix Timestamp raderade jag det och skapade ett nytt med exakt samma namn.
Mvh Markus
Radering?
Kan det ha något att göra med att raderingen inte var fullständig? Det verkar som om Drupal tror att det fortfarande är en datumsträng. En idé är att skapa ett nytt fält med något annorlunda namn och test med det.
Annars kan du titta i tabellen content_node_field på raden för ditt fält och se vad som står i kolumnen type. (Fälten gäller för de sätt jag gjort mina datum samt D6, Det kan vara annorlunda hos dig... Men det borde gå att hitta.) Om det sparas i databasen som en integer så är det med all sannolikhet numera ett Unixtimestamp. Har du skapat en ny fråga efter det att du gjorde om fältets format?
Jag funderade också på om det
Jag funderade också på om det kunde bero på att det var någonting som låg kvar från det tidigare fältet. Har nu testat att skapa en helt ny innehållstyp med ett fält av typen Unix Timestamp. Skapade också en ny vy med ett datumfilter och det är samma sak här. Vad det gäller tabellen content_node_field så antar jag att motsvarande för Drupal 7 är field_config och där står det att fältet har typen datestamp.
Funderar på om Views kollar i tabellen field_config för att kunna veta att det är ett datumfilter som ska användas eller om det är så att man måste skapa någon egen "handler" som säger att just det här fältet ska behandlas som ett datum?
Kollade snabbt
Kollade snabbt, koden är ganska snårig... :( och i D6 kollas det vilket format man har satt fältet till. Alla systemets egna fält hanteras tex som Unixdatestamp. Har du provat att göra en view där du använder något av cores fält för tid för att välja ett intervall? Det kan ju vara något bugg / något som inte är implementerat i D7 än.
I mina D6 där jag har utökade hjälp modulen finns en del info som tyder på att man kan välja lite hur som helst. Dvs det står inget om att man inte kan göra vissa saker med något av formaten vad det gäller urval.
(Jag har inte uppdaterat något till D7 än men det börjar kanske bli daxs :) )
Ja, jag har gjort ett
Ja, jag har gjort ett likadant filter för node created och det fungerar. Har gjort en massa sökningar på hur man skapar egna handlers men det mesta jag har hittat verkar ganska krångligt :(
Det finns en fil som heter views_handler_filter_date.inc, tror att det är den jag vill ska hantera mitt datumfält. I den filen finns några filterinställningar som visas när jag skapar ett filter för node created men som inte visas för mina datum fält. Hade hoppats att det fanns något enkelt sätt att lägga till namnet på tabellen och fältet för att få den att hantera mitt fält.
Har inte jobbat så mycket med Drupal 7 så jag vet inte om det egentligen ska fungera eller om det helt enkelt inte finns stöd för det. Tycker inte jag kan vara den första som vill sätta ett datumfilter på ett eget fält som lagras som ett timestamp. Ska försöka hitta vad det är som hanterar filtret för node created och se om det kan vara till hjälp. Men jag misstänker att det är lättare sagt än gjort :)
Bugg / inget stöd än?
Det kan ju vara så att det är någon bugg i ckk-stödet för D7. Själv har jag hitintills bara gjort handlers för D6 och att skriva dem är ganska enkelt :? fast att sätta sig in i någons annan tar betydligt längre tid. Jag antar att du sökt efter bugg-rapporter i issue-köerna för de olika modulerna under D7...
Ja, jag har sökt i
Ja, jag har sökt i issue-köerna och inte hittat något. Har nu lagt upp en Support Request under Views Issues får se om det ger nått resultat.
Tyvärr står det här,
Tyvärr står det här, http://drupal.org/project/date under "Important Information" att date modulen är lite skakig eftersom views inte satt sig än.
Noden http://drupal.org/node/1257318 , vilket är listan för fixar mm i date 7.x-2.0-alpha4, är ganska lång så man kan tänka sig att inte allt fungerar som det skall än...
Lycka till!!!!
/Thomas
Det är bara att leta vidare
Det är bara att leta vidare :) återkommer om jag hittar någon lösning.
Tack så mycket för all hjälp!
/ Markus
Det löste sig, visade sig att
Det löste sig, visade sig att värdet för datumfältet i databasen var int och inte timestamp :p Tack iallfall för ditt engagemang.
EDIT: Drog nog lite förhastade slutsatser nu. Ser ju att även node created sparas som en int, så problemet kvarstår.