Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]Magento - przykładowy moduł - jak to przerobić ?
phpamator
post 25.07.2016, 22:49:18
Post #1





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Rysh
post 26.07.2016, 07:47:45
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


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źć.


--------------------
Go to the top of the page
+Quote Post
phpamator
post 26.07.2016, 11:00:40
Post #3





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


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



Go to the top of the page
+Quote Post
Rysh
post 26.07.2016, 11:24:38
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
phpamator
post 26.07.2016, 11:44:56
Post #5





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


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 ...
Go to the top of the page
+Quote Post
Rysh
post 26.07.2016, 11:57:21
Post #6





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
phpamator
post 26.07.2016, 12:58:58
Post #7





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


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> ?

Ten post edytował PHPRexio 26.07.2016, 16:01:20
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 14:10