Magento: decimal symbol

Dodany: 21 kwietnia, 2017 | Kategoria: Magento, PHP

Ponieważ w Magento zależnie od ustawionego języka separatorem miejsc dziesiętnych jest kropka lub przecinek, a miałem klienta, który chciał cyfry po tym znaku zamieniać na małe, musiałem znaleźć rozwiązanie. Mimo setek plików XML jednego prostego rozwiązania nie ma, ale jest funkcja która zwraca nam tablicę zawierającą tę i inne cenne informacje o cenach:

Mage::app()->getLocale()->getJsPriceFormat();

1
2
3
$options = Mage::app()->getLocale()->getJsPriceFormat();
echo $options['decimalSymbol']; // returns . (1.5) or , (1,5)
echo $options['groupSymbol']; // returns , (1,000.5) or . (1.000,5)
Tagi: , , , , Brak komentarzy »

Magento: tłumaczenie z innego języka w obecnym

Dodany: 18 listopada, 2016 | Kategoria: Magento

Załóżmy, że jesteśmy w angielskim sklepie, ale potrzebujemy wyświetlić jedno tłumacznenie z niemieckiego. Zamiast je kopiować albo hardcode-ować, wystarczy:

1
2
3
4
5
6
7
8
/* define */
$translate = new Mage_Core_Model_Translate();
$translate->setLocale(
    Mage::getStoreConfig(Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE, $storeId)
)->init('frontend');
/* use */
echo $translate->translate(array('Text to translate'));
// optional %s arguments should be given as second and next arguments in array

To wszystko.

Brak komentarzy »

Magento: HEADERS ALREADY SENT

Dodany: 13 listopada, 2015 | Kategoria: Magento, PHP

Jeśli nagłówki zostały już wysłane, magento będzie w logach pluć błędem: DEBUG (7): HEADERS ALREADY SENT:, wraz ze stosem plików które doprowadziły do logowania tego błędu w app/code/core/Mage/Core/Controller/Response/Http.php:44

Niestety, lista ta nie mówi zbyt wiele:

[1] /lib/Zend/Controller/Response/Abstract.php:766
[2] /app/code/core/Mage/Core/Controller/Response/Http.php:77
[3] /app/code/core/Mage/Core/Controller/Varien/Front.php:188
[4] /app/code/core/Mage/Core/Model/App.php:347
[5] /app/Mage.php:640
[6] /index.php:78

Wystarczy jednak niewielka modyfikacja i dowiemy się gdzie leży problem. Proponuję skopiować plik app/code/core/Mage/Core/Controller/Response/Http.php do app/code/local/Mage/Core/Controller/Response/Http.php

i w metodzie sendHeaders() zamienić:

43
44
45
46
if (!$this->canSendHeaders()) {
    Mage::log('HEADERS ALREADY SENT: '.mageDebugBacktrace(true, true, true));
    return $this;
}

na

43
44
45
46
47
if (!$this->canSendHeaders()) {
    headers_sent($file, $line);
    Mage::log('HEADERS ALREADY SENT: '. $file .':' . $line);
    return $this;
}
Brak komentarzy »

Magento – reindex Solr

Dodany: 4 listopada, 2015 | Kategoria: Magento, PHP
1
2
cd /var/www/html/magento/shell
php indexer.php --reindex catalogsearch_fulltext
Tagi: , , Brak komentarzy »

[Magento] Dodanie opcji do istniejącego atrybutu

Dodany: 24 kwietnia, 2015 | Kategoria: Magento, PHP

Jeżeli atrybut w Magento istnieje i ma już opcje, można je dodać tak:

1
2
3
4
5
6
7
8
9
10
$arg_attribute = 'nazwa_attr';
$arg_value = '<< Nowa opcja >>';

$attr_id = Mage::getModel('catalog/resource_eav_attribute')->loadByCode('catalog_product', $arg_attribute)->getAttributeId();

$option['attribute_id'] = $attr_id;
$option['value']['<< JAKAŚ NAZWA KLUCZA >>'][0] = $arg_value;

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($option);
Brak komentarzy »

[Magento] Nazwa identyfikatora akcji dla layoutu

Dodany: 26 lutego, 2015 | Kategoria: Magento

Tworząc w magento layout należy podać identyfikator dla danego kontrolera i akcji. Niestety czasem są z tym problemy, ale można dość szybko znaleźć wyciągnąć ten identyfikator w samej akcji za pomocą:

1
$this->getFullActionName()
Tagi: , , Brak komentarzy »

Gdzie jest aplikowana paginacja na kolekcji widoku kategorii w Magento?

Dodany: 9 października, 2012 | Kategoria: Magento, PHP

Potrzebowałem znaleźć, gdzie jest ograniczana kolekcja produktów w widoku kategorii, przez co zamiast X produktów wyświetla się np. 9.

1
2
class Mage_Catalog_Block_Product_List {
...
162
163
// set collection to toolbar and apply sort
$toolbar->setCollection($collection);
Tagi: , , , , , , Brak komentarzy »

Includowanie bloku Magento bezpośrednio w templatce

Dodany: 27 lipca, 2011 | Kategoria: Magento, PHP

Gdy wstawimy blok do pliku layoutu, będzie on wczytany przy generowaniu strony (nawet jeśli go nie wyświetlamy w templatce) i sprawdza cache. Dzisiaj miałem taki problem, ze aby nie nadpisywać całego magento i wyswietlania kategorii, najprościej było po prostu ustawić pewien parametr w templatce a potem ten drugi blok miał go odczytywać aby utworzyć klucz dla cache. Tu pojawił się problem, bowiem aby skorzystac z getChildHtml() musiałem ustawić blok w layoucie, co powodowało, ze generował się klucz do cache z parametru, którego jeszcze nie było i sypało błędem.

Poszukałem rozwiazania w googlach i było prawie dobre – niestety okazało się, że metoda setData wcale nie ustawi zmiennej $this->_template, a $this->_data[’template’] dla bloku, przez co output HTMLowy się nie wykonywał ($this->getTemplate() zwracało NULL).

Zatem prawidłowe rozwiązanie to:

echo $this->getLayout()
->createBlock('Name_Module_Block_Type', 'name')
->setTemplate('name/module/type.phtml')
->toHtml();
Tagi: , , , , , , , Brak komentarzy »