Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Magento - manufacturers - problem
Forum PHP.pl > Forum > Przedszkole
phpamator
Witajcie,

Pisząc a właściwie dopisując fragment do istniejącego kodu miałem w założeniu jako efekt końcowy dostać listę 10 losowo wybranych ID spośród kilkuset spełniających wymagania, coś jednak nie za bardzo mi wyszło bo zamiast 10 dostaję jeden albo wcale ....
nie moge dojść dlaczego tak się dzieje.
Oto kod:

  1. Witajcie,
  2.  
  3. Pisząc ten kod a właściwie dopisując jego fragment miałem w założeniu jako efekt końcowy dostać listę 10 losowo wybranych ID spośród kilkuset spełniających wymagania, coś jednak nie za bardzo mi wyszło bo zamiast 10 dostaję jeden albo wcale ....
  4. nie moge dojść dlaczego tak się dzieje.
  5. Oto kod:
  6.  
  7. [php]
  8. <?php
  9.  
  10. class EDPA_MegaNavigation_Block_Navigation extends Infortis_UltraMegamenu_Block_Navigation{
  11.  
  12. ....
  13.  
  14. // tu zaczynamy
  15. // dodajemy element menu
  16.  
  17. if($level_0_name == 'Brands'){
  18. $output .= "<li class='level0 nav-{$level_0_counter} level-top {$position} {$active} parent'>";
  19. $output .= "<a href='" . Mage::getBaseUrl().$data_level_0->getRequestPath(). "' class='level-top'><span>{$level_0_name}</span></span><span class='caret'> </span></a>";
  20. $subcategories = Mage::getModel('catalog/category')
  21. ->load($data_level_0->getId())
  22. //->setSort('id','asc')
  23. ->getChildren();
  24. // dostaję listę id's
  25. $cat_ids = explode(',', $subcategories);
  26.  
  27. $brand = array();
  28. // pobieram listę id's dla attribute = 'manufacturers'
  29. $attribute = Mage::getModel('eav/entity_attribute')
  30. ->loadByCode('catalog_product', 'manufacturer');
  31. $brands = Mage::getResourceModel('eav/entity_attribute_option_collection')
  32. ->setAttributeFilter($attribute->getData('attribute_id'))
  33. ->setStoreFilter(0, false);
  34.  
  35. // buduję listę brands których atrybute_id = 81
  36.  
  37. foreach($brands as $brand){
  38. // && $brand['show_hide'] == 0
  39. if($brand['attribute_id'] != 81){
  40. // jeśli różne od 81 idzie do osobnej listy - w ramach testu
  41. $other[] = ($brand['option_id']);
  42. }else{
  43. $allbrands[] = ($brand['option_id']);
  44. }
  45. }
  46. // wybieram losowo 10 sposrod id's
  47. $favbrands = array_rand($allbrands,10);
  48. $selected = Mage::getModel();
  49. $output .= "<ul class='level0 brands-ul'>";
  50. $a = '';
  51. foreach($cat_ids as $id) {
  52. // wpuszczam w petle i wybieram kolejno z listy $favbrand - tu powinno ich być 10 .... i jest ale magicznie nie wszystkie beda pokazane
  53. if (in_array($id, $favbrand)) {
  54. $brand = Mage::getModel('catalog/category')->load($id);
  55. $image = Mage::getUrl("media/catalog/category/") . $brand->getThumbnail();
  56. $url = Mage::getUrl().$brand->getRequestPath();
  57. $id = $this->getId();
  58. $output .= "<li class='brands-subnavigation'>";
  59. $output .= "<a href='{$url}'><img src='{$image}'></a>";
  60. $output .= "<div>".$id."</div>";
  61. $output .= "</li>";
  62.  
  63. }
  64. }
  65.  
  66. $output .= "<li style='' class='see-all-brands'><a href='".Mage::getBaseUrl().$data_level_0->getRequestPath()."'>See All</a></li>";
  67. $output .= "</ul>";
  68.  
  69. }elseif($level_0_name == 'Summer Sale'){
  70. $output .= "<li {$class}>";
  71. $output .= "<a href='" . Mage::getBaseUrl().$data_level_0->getRequestPath(). "' class='level-top red'><span>{$level_0_name}</span>{$caret}</a>";
  72.  
  73. }else {
  74.  
  75. $output .= "<li {$class} >";
  76. $output .= "<a href='" . $level_0_url . "' class='level-top '><span>{$level_0_name}</span>{$caret}</a>";
  77. // jako efekt działania wyświetlona zostanie lista manufacturers'ów w postaci ich znakow firmowych (logo)
  78.  
  79. }
  80.  
  81. ...
darko
Spróbuj dodać nieco losowości zapytaniu:

  1. $attribute = Mage::getModel('eav/entity_attribute')->loadByCode(Mage_Catalog_Model_Product::ENTITY, 'manufacturer');
  2. /** @var $attribute Mage_Eav_Model_Entity_Attribute */
  3. $collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
  4. ->setAttributeFilter($attribute->getId())
  5. ->setStoreFilter(0, false);
  6. $collection->getSelect()->order(new Zend_Db_Expr('RAND()'));
Rysh
Cytat(darko @ 27.08.2016, 13:45:00 ) *
Spróbuj dodać nieco losowości zapytaniu:

  1. $attribute = Mage::getModel('eav/entity_attribute')->loadByCode(Mage_Catalog_Model_Product::ENTITY, 'manufacturer');
  2. /** @var $attribute Mage_Eav_Model_Entity_Attribute */
  3. $collection = Mage::getResourceModel('eav/entity_attribute_option_collection')
  4. ->setAttributeFilter($attribute->getId())
  5. ->setStoreFilter(0, false);
  6. $collection->getSelect()->order(new Zend_Db_Expr('RAND()'));

Od kiedy jestem tutaj na forum, zawszę słyszę nigdy nie stosować ORDER BY RAND() - nie sądzę aby coś się zmieniło od tamtej pory.
darko
@Rysh - Nie przesadzaj, wydajność w tym przypadku nie ma kluczowego znaczenia, potrzeba 10 losowych rekordów spośród "kilkuset spełniających wymagania". Poza tym powodzenia z kolekcjami magento i wymyślaniem w jaki sposób wyciągnąć 10 losowych rekordów w inny sposób.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.