Thu, 05/10/2012 - 17:28
Vai ir iespējams un kā var pievinot jaunu "Contextual filters" ?
Jau eksistē => Content: Created year + month (Date in the form of YYYYMM.)
Bet man vajag lai paths sanāk YYYY/MM
ps. Es te mēģinu uztaisīt wordpress-like post archive. Visi posti man ir pieejami sekojošā veidā:
blogs/ (all blogs)
blogs/YYYY/ (blogs by year)
blogs/YYYY/MM (blogs by month)
blogs/YYYY/MM/DD (blogs by day)
blogs/YYYY/MM/DD/title (specific entry)
:) Tas jau darbojas, izmantoju views :)
Palīdziet tikt galā ar arhīvu >?
- Bloks ar Contextual filter un Summary YYYY+MM
Itkā viss darbojas, taču nianse ir tajā, ka saites, ko šāds bloks dod automātiski, URL papildina ar nepareizo argumentu - YYYYMM, nevis, kā nepieciešams YYYY/MM. Kādēļ tas nav iekļauts un vis ticamāk arī netiks iekļauts Views (3) modulī ir aprakstīts šeit: http://drupal.org/node/293791 Tajā pat laikā šajā diskusijā ir piedāvāts labojums, kuru gan neesmu testējis. Pamata iemesls ir tas, ka Drupal "/" simbolu uzskata par argumentu atdalītāju, bet Summary risinājums piedāvā tikai viena argumenta piesaisti, kas standarta versijā ir YYYYMM (kopā). Arī vairāku argumentu (kontekstuālo filtru) saķēdēšana nedod rezultātus.- Manuāli veidots bloks un tā saites
Arī šim risinājumam ir nianses. Ir iespējas izveidot ar roku pareizo taku, taču papildus problēmas rodas rakstu skaita aprēķināšanā (jo nepieciešams papildināt bloku ar rakstu skaitu noteiktā laika periodā - optional, protams), kā arī ar Distinct Mēnesis, GGGG (x) ierakstu izveidi. Iemesls tam, ka šos unikālos ierakstus nevar izveidot ir saistīts ar to, ka Views uzstādījumi, kurus pieļauj UI tiek piemēroti pēc SQL meklējuma, bet Drupal datubāzē saglabā Unix Timestamp formātu. Līdz ar ko, ja 2011.gada maijā ir 2 raksti dažādās dienās, tad parādīsies divas saites uz Maijs, 2011 (1). Tas tādēļ, ka grupēšana tiek veikta ņemot vērā arī laika daļu raksta datumā (jeb timestamp), un tie vienādi var būt tikai unikālas sakritības un veiklu pirkstu gadījumā, jeb drīzāk nekad. Iespējamie risinājumi Drupal.org ir divi projekti, kas itkā šo lietu centās atrisināt:Taču te ir daudz var būt pat liekas funkcijas, un arī šis bloga rakstu atlases bloks nav īsti 1:1, ko Ingus vēlas, taču var būt to var izmantot.
Arī papildina instalāciju ar liekām lietām, bet tomēr var būt ir izmantojams.
function CUSTOM_MODULIS_preprocess_views_view_summary(&$vars) { foreach ($vars['rows'] as &$row) { $date = array(); $date[] = substr($row->created_year_month, 0, 4); if (strlen($row->created_year_month) > 4) $date[] = substr($row->created_year_month, 4, 2); if (strlen($row->created_year_month) > 6) $date[] = substr($row->created_year_month, 6, 2); $new_created_year_month = implode('/',$date); $row->url = url('archive/'.$new_created_year_month); } }
kā jāveido custom moduļus cerams nav jāizskaidro. Vēl ir opcija likt kodu template.php un CUSTOM_MODULIS jānomaina uz MANA_TĒMA. Piezīme: to darīt tikai tad ja netiek izmantota jau gatava contrib tēma. Var arī paņemt summary sagatavi no sites/all/modules/views/theme/views-view-summary.tpl.php, ievietot savā tēmā un mainīt $row->url vērtību tajā, bet es dodu priekšroku mazāk templeitu failiem. (piezīme: noteikti nemainiet failu pa taisno iekš sites/all/modules/views/theme)$row->url
tiek veidots šajā funkcijā, šis risinājums neņem vērā Views UI ievadītos parametrus Konteksta filtra Base path lauciņā. Līdz ar ko visu, kas ir pirms YYYY parametra, ieskaitot arī /, ir jāapraksta šajā funkcijā. Taču, ja ir vēlme izmantot Views UI parametrus, tad pēdējā rindiņa izskatās šādi:... $row->url = url($vars['options']['base_path'] . '/' . $new_created_year_month); ...
$row->url
. Es domāšanas virzienā pašlaik skatos uz iespēju modificēt visu linku, nevis tikai URL, kas attiecīgi dotu iespēju manuāli (caur tēmas template.php) klaisi pievienot, kā tas ir iekš views-view-summary.tpl.php. Taču pieslēdzot modifikācijas caur template.php tēmā, mainīgais$variables['row_classes']
pazūd un netiek ieviests.'active'
klase pie$row->url
. Mazliet pamainīju arī savu iepriekš pausto viedokli par$vars['options']['base_path']
risinājumu. Ja gadījumā manā kodā ir nepilnības, lūdzu to piekoriģēt. Kodu izvietoju Omega apakštēmas template.php failā, kur par pamatu ir ņemts Jāņā Bebrīša rakstītais kods: http://www.drupal.lv/drupal-7-views-3-contextual-filters#comment-888 Taču jāsaka, ka man viss darbojas, ieskaitot arī base_path nomaiņu caur Views UI pie kontekstuālā filtra uzstādījumiem. Referencei un kodu daļām izmantots vēl šis resurss.function YOURTHEME_preprocess_views_view_summary(&$vars) { $view = $vars['view']; $argument = $view->argument[$view->build_info['summary_level']]; foreach ($vars['rows'] as $id => $row) { $date = array(); $date[] = substr($row->created_year_month, 0, 4); if (strlen($row->created_year_month) > 4) $date[] = substr($row->created_year_month, 4, 2); if (strlen($row->created_year_month) > 6) $date[] = substr($row->created_year_month, 6, 2); $new_created_year_month = implode('/',$date); $row->url = url($argument->options['summary_options']['base_path'] . '/' . $new_created_year_month); $active_urls = drupal_map_assoc(array( url($_GET['q'], array('alias' => TRUE)), // force system path url($_GET['q']), // could be an alias )); if (isset($active_urls[$vars['rows'][$id]->url])) { $vars['row_classes'][$id] = 'active'; } } }