Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Magento - przykładowy moduł - jak to przerobić ?
Forum PHP.pl > Forum > Przedszkole
phpamator
Panowie,
stawiając pierwsze kroki w Magento z przyzwyczajenia napakowałem wszystkiego jak leci do jednego pliku. Nie do końca rozumiem idee więc chciałbym zasięgnąć języka i może podpowiedzi jak powinienem to rozbić do postaci bardziej "Magento-podobnej" czyli co powinienem wrzucić do Model, co do Controller, Helper itd.
Oczywiście kod z pewnością pozostawia wiele do życzenia ale jak wspomniałem dopiero zacząłem (jakieś 3 tygodnie temu smile.gif .. od zera).
  1. <?php
  2. /*
  3.  
  4.  * @category AMBeR
  5.  
  6.  * @package AMBeR_Checkbox
  7.  
  8.  * @author AMBR
  9.  
  10.  * @date 12-07-2016
  11.  
  12.  * @last edit 12-07-2016
  13.  
  14.  * @copyright Copyright 2016 AMBeR
  15. it
  16.  */
  17.  
  18. class Amber_Checkbox_Adminhtml_FutureController extends Mage_Adminhtml_Controller_Action
  19. {
  20. public function indexAction()
  21. {
  22. $this->loadLayout();
  23. $ajax = "<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js'></script>
  24. <script> jQuery(document).ready(function(){
  25. var total = $(this).find(\"input[class=tramp]:checked\").length;
  26. jQuery(\".caret input[type='checkbox']\").change(function(){
  27. if($(this).is(':checked')){
  28. var value= true;
  29. }else{
  30. var value = false;
  31. }
  32. var brand = $(this).data('brand');
  33.  
  34. data = {brand: brand, value: value}
  35. jQuery.ajax({
  36. data: data,
  37. url: 'checkbox/adminhtml/ajax',
  38. method: 'POST',
  39. success: function(result){
  40.  
  41. console.log(data, total);
  42. }});
  43. });
  44. });
  45. </script>";
  46. $style = "<style>a{display: block;}.pico{width:150px;height:50px; background-color: #FF6700;color: #00a;}.inline:hover{box-shadow: #888888 3px 3px 3px;}.inline{display: flex; border-radius:5px;margin-bottom: 5px;margin-right: 5px;width: 170px; float: left;font-family: Verdana; font-size: 16px;}.tiname{position: relative;text-align: center;border-top-left-radius: 5px;border-bottom-left-radius: 5px;padding:10px;border: 1px solid rgba(100,120,100,0.5); height: 145px;width: 110px;}.sub{ border-top-right-radius: 5px;border-bottom-right-radius: 5px;text-align: center;padding:10px;border: 1px solid rgba(100,120,100,0.5);width: 20px; }.pic{z-index:2;width:100px;height:auto;}.sub{ border-top-right-radius: 5px;border-bottom-right-radius: 5px;text-align: center;padding:10px;border: 1px solid rgba(100,120,100,0.5);width: 20px; }</style>";
  47. $brandbox = $ajax.$style."<h2>Other brands</h2><div class='bobo'>";
  48. $favourite = $style."<h2>Favourites</h2><div class='bobo'>";
  49. $attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'manufacturer');
  50. $collection = Mage::getResourceModel('eav/entity_attribute_option_collection')->setAttributeFilter($attribute->getData('attribute_id'))->setStoreFilter(0, false);
  51. $a = 0;
  52. foreach($collection as $value) {
  53. $brand = Mage::getModel('catalog/category')->load($value['option_id']);
  54. $image = '../../../../../../media/catalog/category/'.$brand->getData('thumbnail');
  55. $url = Mage::getUrl().$brand->getRequestPath();
  56. $state = $value['show_brand'];
  57. if($value['show_brand']==1 && $value['attribute_id']==81){
  58. $state = 'checked';
  59. $favourite .= "<a href='".$url."'><div class='inline'><div class='tiname'><img class='pic' src='{$image}'/>" . $value['value'] ."</div></a><div class='sub caret'><input id='".$value['option_id']."' class='tramp' name='check[]' data-brand=".$value['option_id']." type='checkbox' {$state}/></div></div>";
  60. }else{
  61. $state = '';
  62. $brandbox .= "<a href='".$url."'><div class='inline'><div class='tiname'><img class='pic' src='{$image}'/>" . $value['value'] . "</div></a><div class='sub caret'><input id='".$value['option_id']."' class='tramp' name='check[]' data-brand=".$value['option_id']." type='checkbox' {$state}/></div></div>";
  63. }
  64. $a++;
  65. //if($a==35){
  66. //break;
  67. //}
  68. }
  69. $favourite .="</div>";
  70. $brandbox .="</div>";
  71. $this->_addLeft($this->getLayout()->createBlock('core/text')->setText($favourite));
  72. $this->_addContent($this->getLayout()->createBlock('core/text')->setText($brandbox));
  73. $this->renderLayout();
  74. }
  75. }
  76. ?>

Trochę zamotane wink.gif
bo powinienem utworzyć layout i template albo block i tam wetknąć co nieco a tylko pobieranie danych i ich obróbkę do model i controller.
Szukam przykładów (v1.9) na podstawie których mógłbym co nieco rozkminić.
Niemniej, jesli ktoś mogłby mi podpowiedziećjak to przerobić ?

Pozdrawiam
Rysh
Kod css i js powinieneś załączyć na swoją stronę przez config.xml i layout.xml

http://stackoverflow.com/questions/2609313...o-magento-theme
http://magento.stackexchange.com/questions...ss-file-to-head

Ten kod HTML/CSS/JS który jest w indexAction nie powinien się tam w ogóle znaleźć.
phpamator
Hej, domyślam się smile.gif
To wszystko dlatego, że nie do końca dotarło do mnie co i gdzie i dlaczego.
Jeśłi miałbyś ochotę i np podzielił kod dodając np komentarze co gdzie powinno się znaleźć według ciebie ...... ?
Była by to dla mnie ogromna pomoc i wskazówka jak powinienem budować smile.gif



Rysh
Po pierwsze jQuery powinno być domyślnie w magento - sprawdź czy jest konieczne aby go załączać ponownie.
Kod z $ajax przeniesiony do osobnego JS lub do .phtml
Kod z $style do osobnego css, jeśli robisz nową wtyczkę najlepiej dodać swój css i w nim modyfikować kod.
Pozostały kod powinien wylądować w .phtml
phpamator
Tak właśnie robię smile.gif
Ale kurcze coś mi nie chce zobaczyć css'a ...
niby w config.xml dodałem, w layout też i nic ...
Rysh
Sprawdzaj czy w źródle strony czyta Ci tego .css - i nie zapomnij wyczyścić cache lub wyłączyć jeśli pracujesz na lokalnej maszynie.
phpamator
Tak własnie robię wink.gif
Przy okazji, jeśli moge zapytać ....
Potrzebuję zrobić coś takiego:
Pobrać dane produktu wraz z ceną, próbuję więc ... ale wciąż nie moge się dokopac do ceny, własciwie to potrzebuję cenę
  1. $price = number_format($product["price"],2);
  2. $special_price = number_format($product["special_price"],2);
  3. $final_price = number_format($product["final_price"],2);

robię więc tak:
  1. $products = Mage::getModel('catalog/product')->getCollection();
  2. $products->addAttributeToSelect('name', 'price', 'brand','attribute');
  3.  
  4. foreach($products as $_product)
  5. {
  6. if($_product){
  7. //var_dump($product);
  8. echo "Product: ". $_product->getName()." SKU: ".$_product->getSku()."<br/>";
  9. echo "Price: ". $price = Mage::getModel('catalogrule/rule')->calcProductPriceRule($_product,$_product->getPrice())."<br/>";
  10. echo "Brand: ". $_product->getData('manufacturer')."<br/>";
  11. echo '</br></br>';
  12. }
  13. else{
  14. echo 'No promotion';
  15. }
  16. }

ale w efekcie nie dostaję ani Producenta, ani cen ... sad.gif
męczy mnie to Magento smile.gif

Po chwili walki w końcu doszedłem jak zmusić aby pojawiła się cena.
Okazało się, że addAttributeToSelect, jeśli się tak jak ja wymusza ... nie zadziała wink.gif

Zadziała natomiast kiedy się ładnie poprosi smile.gif
  1. $collection = Mage::getModel('catalog/product')->getCollection();
  2. $collection->addAttributeToSelect(array('name','price','special_price'));
  3.  
  4. $result = array();
  5.  
  6. foreach ($collection as $product) {
  7. //var_dump($product);
  8. $result[] = array(
  9. 'product_id' => $product->getId(),
  10. 'name' => $product->getName(),
  11. 'type' => $product->getTypeId(),
  12. 'set' => $product->getAttributeSetId(),
  13. 'sku' => $product->getSku(),
  14. 'price' => $product->getPrice(),
  15. 'min_price' => $product->getMinPrice(),
  16. 'max_price' => $product->getMaxPrice(),
  17. 'special_price' => $product->getSpecialPrice(),
  18. 'final_price' => $product->getFinalPrice(),
  19. 'news_from_date'=> $product->getNewsFromDate()
  20. );


W tak zwanym międzyczasie, nasunęła mi się myśl "po ch....re" porównywać ceny .... w zasadzie plan był taki, żeby system automatycznie wyświetlał banner na produkcie jeśli cena "special_price" różni się od "price" lub "final_price" skoro można ustawić datę od kiery dany produkt ma być że tak powiem "promowany" ale szybko sobie wyjaśniłem, że zamiast dla każdego z osobna zmieniać daty, prościej będzie np obniżyć cenę i resztę już sobie Magento będzie robić automatycznie,

Tak, zostanę jednak przy pomyśle nad którym w tej chwili pracuję.
Nie wiem jednak, gdzie powinienem tę funkcję umieścić aby była "widoczna" wszędzie gdzie pojawiają się produkty, czyli strony produktów, strony kategorii czy np slidery.

Jak zrobić taką funkcję aby była "Globalną" ?
Czy wystarczy umieścić klasę w tagach <global> ?
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.