PageRenderTime 59ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/catalog/controller/module/filter.php

https://bitbucket.org/monobasic/shop.volero.ch
PHP | 324 lines | 278 code | 41 blank | 5 comment | 27 complexity | 0bdb5720829b92929f561bf4815df5b5 MD5 | raw file
  1. <?php
  2. /*
  3. * simonfilters - 2.4.0 Build 0015
  4. */
  5. class ControllerModuleFilter extends Controller {
  6. public function checkvalidity() {
  7. if(isset($_SESSION['simonfilters']['filterstimestamp'])) {
  8. $this->settingLastModified = $this->config->get('simonfilterstimestamp');
  9. if ($_SESSION['simonfilters']['filterstimestamp'] < $this->settingLastModified) {
  10. $_SESSION['simonfilters']=null;
  11. $_SESSION['simonfilters']['filterstimestamp']=time();
  12. }
  13. }else {
  14. $_SESSION['simonfilters']['filterstimestamp']=time();
  15. }
  16. }
  17. function get_clear_filters_status($filter_type_name,$group_id,$filter_group,$currentfilters) {
  18. if(!is_array($currentfilters)){
  19. die("SimonFilters has detected a major problem in CurrentFilters.<br><br>");
  20. }
  21. $clear_filters_display='style=\'display:none\'';
  22. foreach($filter_group as $filter_id=>$filter_group_item) {
  23. if(is_numeric($filter_id)) {
  24. foreach($filter_group_item['filter_name'] as $key=>$filter_item) {
  25. if(in_array("{$filter_type_name}.{$group_id}.{$filter_id}.{$key}", $currentfilters)) {
  26. $clear_filters_display = '';
  27. }
  28. }
  29. }
  30. }
  31. return $clear_filters_display;
  32. }
  33. protected function generateHTML($display_type) {
  34. $sfs = $this->model_catalog_filter->data;
  35. $this->data['filterCount'] = count($sfs);
  36. $this->data['showprice']=false;
  37. $this->data['debug_mode']=$this->model_catalog_filter->debugmode;
  38. $this->data['simondebugjs1']='';
  39. $this->data['simondebugjs2']='';
  40. if($this->data['debug_mode']) {
  41. $this->data['simondebugjs1']= "
  42. $('li.add_filter').each(function(){ $(this).attr('title',$(this).attr('id')); });
  43. var sfprex=400;
  44. var sfprey=10;
  45. $('pre').prepend( $('<a href=\'#\'>[x]</a>').click(function(event){event.preventDefault();$(this).parent().remove();}) )
  46. $('pre').appendTo('body');
  47. $('pre').draggable();
  48. $('pre').each(function(){
  49. $(this).css('top', sfprey +'px');
  50. $(this).css('left', sfprex +'px');
  51. sfprey+=20;
  52. sfprex+=20;
  53. });
  54. if($('pre').length>0){
  55. $('body').prepend( $('<pre style=\'top:0px;left:0px\'></pre>').draggable().append(
  56. '<a href=\'#\'>Close PRES</a>').click(function(event){event.preventDefault();$('.simondebug').remove();}
  57. ));
  58. }
  59. ";
  60. $this->data['simondebugjs2']= "
  61. if(data.match(/<pre class='simondebug'>(\\n|.)*<\/pre>/mg)){
  62. $.each(data.match(/<pre class='simondebug'>(\\n|.)*<\/pre>/mg), function(i,o){
  63. $(o)
  64. .prepend( $('<a href=\'#\'>[x] (AJAX)</a>').click(function(event){event.preventDefault();$(this).parent().remove();}) )
  65. .draggable()
  66. .appendTo('body');
  67. });
  68. var sfprex=400;var sfprey=10;
  69. $('.simondebug').each(function(){ $(this).css('position','absolute'); $(this).css('top', sfprey +'px');$(this).css('left', sfprex +'px');sfprey+=20;sfprex+=20;});
  70. }
  71. ";
  72. }
  73. if($this->data['filterCount']>0) {
  74. $currentfilters = $this->model_catalog_filter->currentfilters;
  75. $this->model_catalog_filter->debug(__FILE__.';'.__LINE__,'currentfilters', $currentfilters);
  76. $this->model_catalog_filter->debug(__FILE__.';'.__LINE__,'sfs', $sfs);
  77. $out = "";
  78. $out = "<ul class='filter_grouper'>";
  79. if(is_array($currentfilters)) {
  80. $currentfiltersFlat = implode(',', $currentfilters);
  81. }else {
  82. $currentfiltersFlat='';
  83. }
  84. $clear_filters_display=array();
  85. $simonfilters_sort = preg_split('/,/',$this->config->get('simonfilters_sort'));
  86. $sfs_temp = array();
  87. foreach($simonfilters_sort as $sorted_key){
  88. if(isset($sfs[$sorted_key])){
  89. $sfs_temp[$sorted_key]=$sfs[$sorted_key];
  90. }
  91. }
  92. $sfs=$sfs_temp;
  93. #print_r($sfs);
  94. foreach($sfs as $filter_type_name => $filter_type) {
  95. foreach($filter_type as $group_id=>$filter_group) {
  96. $filter_group_name = $filter_group['filter_group_name'];
  97. switch($filter_type_name) {
  98. case 'a':case 'o':case 'm':case 's':case 'c':$clear_filters_display = $this->get_clear_filters_status($filter_type_name,$group_id,$filter_group,$currentfilters);
  99. break;
  100. case 'p':$clear_filters_display ='';
  101. break;
  102. }
  103. switch($this->data['orientation']) {
  104. case 'vertical':
  105. if(($this->data['collapsible']=='1') && ($filter_type_name!='p')) {
  106. $behavior = isset($filter_group['b'])?($filter_group['b']=='1'?'expanded':'collapsed'):'expanded';
  107. $collapsible = 'collapsible';
  108. }else {
  109. $behavior='';
  110. $collapsible='';
  111. }
  112. $out .= "<li class='filter_group {$collapsible} {$behavior}' filtertype='{$filter_type_name}'>";
  113. $out .= "<div class='filter_title'>{$filter_group_name}";
  114. if($filter_type_name!='p')$out .= "<span class='clear_filters_local_container'><span class='clear_filters_local' $clear_filters_display>[X]</span></span>";
  115. $out .= "</div>";
  116. $out .= "<div class='filter_ul' ". ($behavior=='collapsed'?"style='display:none'":"") ."><ul>";
  117. break;
  118. case 'horizontal':
  119. if($filter_type_name=='p') {
  120. $out .= "<li class='filter_group'>";
  121. $out .= "<table><tr><td style='width:1px;'>";
  122. $out .= "<div class='filter_title'>{$filter_group_name}</div>";
  123. $out .= "</td><td>";
  124. $out .= "<div class='filter_ul'><ul>";
  125. }else {
  126. $out .= "<li class='filter_group'>";
  127. $out .= "<table><tr><td style='width:1px;'>";
  128. $out .= "<div class='filter_title'>{$filter_group_name}</div>";
  129. $out .= "</td><td>";
  130. $out .= "<div class='filter_ul'><ul>";
  131. }
  132. break;
  133. }
  134. foreach($filter_group as $filter_id=>$filter_group_item) {
  135. if(is_numeric($filter_id)) {
  136. foreach($filter_group_item['filter_name'] as $key=>$filter_item) {
  137. $md5filter_item = md5($filter_item);
  138. $totals = (($this->data['display_totals']=='yes' && isset($filter_group_item['filter_totals'][$key]))?'('.$filter_group_item['filter_totals'][$key].')':'');
  139. $checked = in_array("{$filter_type_name}.{$filter_id}.{$md5filter_item}", $currentfilters)?'checked':'unchecked';
  140. switch($this->data['orientation']) {
  141. case 'vertical':
  142. if($filter_type_name=='p') {
  143. $this->data['showprice']=true;
  144. $this->data['prices']=$sfs['p'][1]['prices'];
  145. list($this->data['minprice_slider'], $this->data['maxprice_slider'])=array($this->data['prices']['minprice'], $this->data['prices']['maxprice']);
  146. foreach($currentfilters as $currentfilter) {
  147. $currentfilterAri = preg_split('/\./', $currentfilter);
  148. if($currentfilterAri[0]=='p') {
  149. list($this->data['minprice_slider'], $this->data['maxprice_slider'])=preg_split('/,/',$currentfilterAri[2]);
  150. }
  151. }
  152. $out .= "<li class='add_filter simonfilters_price' id='p.1.1'>";
  153. $out .= "<div id='simonfilters_price-range'></div><div id='simonfilters_price_amount'></div></li>";
  154. }else {
  155. $out .= "<li class='add_filter {$checked}' id='{$filter_type_name}.{$filter_id}.{$md5filter_item}'>{$filter_item} {$totals}</li>";
  156. }
  157. break;
  158. case 'horizontal':
  159. if($filter_type_name=='p') {
  160. $this->data['showprice']=true;
  161. $this->data['prices']=$sfs['p'][1]['prices'];
  162. list($this->data['minprice_slider'], $this->data['maxprice_slider'])=array($this->data['prices']['minprice'], $this->data['prices']['maxprice']);
  163. foreach($currentfilters as $currentfilter) {
  164. $currentfilterAri = preg_split('/\./', $currentfilter);
  165. if($currentfilterAri[0]=='p') {
  166. list($this->data['minprice_slider'], $this->data['maxprice_slider'])=preg_split('/,/',$currentfilterAri[2]);
  167. }
  168. }
  169. $out .= "<li class='add_filter simonfilters_price' id='p.1.1'>";
  170. $out .= "<table><tr><td style='width:200px'><div id='simonfilters_price-range'></div></td><td><div id='simonfilters_price_amount'></div></td></tr></table></li>";
  171. }else {
  172. $out .= "<li class='add_filter {$checked}' id='{$filter_type_name}.{$filter_id}.{$md5filter_item}'>{$filter_item} {$totals}</li>";
  173. }
  174. break;
  175. }
  176. }
  177. }
  178. }
  179. switch($this->data['orientation']) {
  180. case 'vertical':
  181. $out .="</ul></div>";
  182. break;
  183. case 'horizontal':
  184. if($filter_type_name!='1p') {
  185. $out .="</ul></div></td></tr></table>";
  186. }
  187. break;
  188. }
  189. $out .="</li>";
  190. }
  191. }
  192. $out .="</ul>";
  193. if(count($currentfilters)>0) {
  194. $this->data['clear_filters_global_display']='style=\'display:inline\'';
  195. }else {
  196. $this->data['clear_filters_global_display']='style=\'display:none\'';
  197. }
  198. return $out;
  199. }else {
  200. return '';
  201. }
  202. }
  203. protected function index($setting) {
  204. $this->load->model('catalog/filter');
  205. $this->document->addStyle('catalog/view/theme/default/stylesheet/simonfilters_stylesheet.css');
  206. switch($this->config->get('config_template')) {
  207. case 'shoppica':
  208. $this->document->addStyle('catalog/view/javascript/jquery/ui/themes/ui-lightness/jquery-ui-1.8.16.custom.css');
  209. break;
  210. default:
  211. break;
  212. }
  213. $this->data['display_type']="text_type_default";
  214. switch($this->model_catalog_filter->getRoute()){
  215. case "product/category":
  216. $simonfilters_category_domid = $this->config->get("simonfilters_category_domid");
  217. $this->data['containerID']=isset($simonfilters_category_domid[$this->config->get('config_template')])?$simonfilters_category_domid[$this->config->get('config_template')]:'#content';
  218. $this->data['containerIDtarget']=$this->data['containerID'];
  219. break;
  220. case "product/manufacturer/product":
  221. $simonfilters_manufacturer_domid = $this->config->get("simonfilters_manufacturer_domid");
  222. $this->data['containerID']=isset($simonfilters_manufacturer_domid[$this->config->get('config_template')])?$simonfilters_manufacturer_domid[$this->config->get('config_template')]:'#content';
  223. $this->data['containerIDtarget']=$this->data['containerID'];
  224. break;
  225. case "product/search":
  226. $simonfilters_search_domid = $this->config->get("simonfilters_search_domid");
  227. $this->data['containerID']=isset($simonfilters_search_domid[$this->config->get('config_template')])?$simonfilters_search_domid[$this->config->get('config_template')]:'#content';
  228. $this->data['containerIDtarget']=$this->data['containerID'];
  229. break;
  230. case "homepage":
  231. $simonfilters_homepage_domid = $this->config->get("simonfilters_homepage_domid");
  232. $simonfilters_search_domid = $this->config->get("simonfilters_search_domid");
  233. $this->data['containerID']=isset($simonfilters_homepage_domid[$this->config->get('config_template')])?$simonfilters_homepage_domid[$this->config->get('config_template')]:'#content';
  234. $this->data['containerIDtarget']=isset($simonfilters_search_domid[$this->config->get('config_template')])?$simonfilters_search_domid[$this->config->get('config_template')]:'#content';
  235. break;
  236. }
  237. $simonfilters_force_siblings = $this->config->get("simonfilters_force_siblings");
  238. $this->data['simonfilters_force_siblings']=isset($simonfilters_force_siblings[$this->config->get('config_template')])?$simonfilters_force_siblings[$this->config->get('config_template')]:'false';
  239. $this->data['css']='';
  240. foreach($this->config->get("filter_module") as $filter_module) {
  241. if($filter_module['layout_id']==$setting['layout_id']) {
  242. $this->data['display_totals']=isset($filter_module['display_totals'])?$filter_module['display_totals']:'no';
  243. $this->data['position']=isset($filter_module['position'])?$filter_module['position']:'left';
  244. $simonfilters_styles = $this->config->get('simonfilters_styles');
  245. $this->data['display_type']=isset($filter_module['display_type'])?$simonfilters_styles[$filter_module['display_type']]['name']:'default';
  246. $this->data['css']=(isset($filter_module['display_type'])?html_entity_decode($simonfilters_styles[$filter_module['display_type']]['css']):'n/a');
  247. $this->data['orientation']=(isset($filter_module['display_type'])?$simonfilters_styles[$filter_module['display_type']]['orientation']:'vertical');
  248. $this->data['collapsible']=(isset($simonfilters_styles[$filter_module['display_type']]['collapsible'])?$simonfilters_styles[$filter_module['display_type']]['collapsible']:'vertical');
  249. $this->data['activefilter_simonfilters_price']=$this->config->get("activefilter_simonfilters_price");
  250. if($this->model_catalog_filter->debugmode) {
  251. $this->data['css'] .="pre{ border:1px solid #eaeaea; padding: 2px; background-color: yellow; position:absolute; z-index: 1000; word-wrap: break-word !important;}pre.small{ width:20px; height:20px; font-size: 0.0em;}";
  252. }
  253. }
  254. }
  255. $this->language->load('module/filter');
  256. $this->data['heading_title'] = $this->language->get('heading_title');
  257. $this->data['clear_filters_title'] = $this->language->get('clear_filters_title');
  258. $this->data['language_id'] = $this->config->get('config_language_id');
  259. $this->data['route'] = $this->model_catalog_filter->getRoute();
  260. $this->data['category_id'] = $this->model_catalog_filter->getCategoryID();
  261. $this->data['index'] = $this->model_catalog_filter->getSimonIndex();
  262. $this->data['isThereAnyFilterEnabled'] = $this->model_catalog_filter->isThereAnyFilterEnabled();
  263. switch($this->model_catalog_filter->getRoute()) {
  264. case "homepage":
  265. $this->data['urlAjax'] = "index.php?route=product/search&filter_name=%";
  266. break;
  267. default:
  268. $this->data['urlAjax'] = preg_replace('/\&page=[0-9]*/','',$_SERVER["REQUEST_URI"]);
  269. break;
  270. }
  271. $this->data['simonfilters_front_end_diagnostics'] = $this->config->get('simonfilters_front_end_diagnostics')=='1'?'true':'false';
  272. $this->data['XRequestedWith'] = $this->model_catalog_filter->getHeader('X-Requested-With');
  273. $this->data['HTML']=$this->generateHTML($this->data['display_type']);
  274. if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/filter.tpl')) {
  275. $this->template = $this->config->get('config_template') . '/template/module/filter.tpl';
  276. } else {
  277. $this->template = 'default/template/module/filter.tpl';
  278. }
  279. $this->render();
  280. //}
  281. }
  282. }
  283. ?>