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 »

Kilka wersji PHP na raz w różnych katalogach pod jednym Apache [WAMP]

Dodany: 5 maja, 2015 | Kategoria: Apache, PHP

Należy pobrać fcgi dla apache:

Wklejamy mod_fcgid.so do wamp\bin\apache\apache2.x.x\modules

Otwieramy plik konfiguracyjny apache wamp\bin\apache\conf\httpd.conf. Znajdujemy linijkę:

1
LoadModule php5_module "C:/Wamp/bin/php/php5.5.x/php5apache2_4.dll

I zamieniamy na

1
2
#LoadModule php5_module "C:/Wamp/bin/php/php5.5.x/php5apache2_4.dll
LoadModule fcgid_module modules/mod_fcgid.so

Poniżej dodajemy też konfigurację dla domyślnego PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FcgidInitialEnv PATH "C:/wamp/bin/php/php5.5.x;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "C:/wamp/tmp"
FcgidInitialEnv TMP "C:/wamp/tmp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 64
FcgidConnectTimeout 16
FcgidMaxRequestsPerProcess 1000
FcgidMaxProcesses 3
FcgidMaxRequestLen 8131072
# Location php.ini:
FcgidInitialEnv PHPRC "C:\wamp\bin\php\php5.5.x"
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
Options Indexes FollowSymLinks ExecCGI
AddHandler fcgid-script .php
FcgidWrapper "C:/wamp/bin/php/php5.5.x/php-cgi.exe" .php

Restartujemy WAMPa i sprawdzamy, czy adres http://localhost/?phpinfo=1 działa.

Przechodzimy do konfiguracji VHOSTów do sekcji <Directory> danego hosta, albo tworzymy plik .htaccess (otaczamy wtedy fragmenty w <Files ~ "\.php$">...</Files> w katalogu w którym chcemy innej wersji PHP i dodajemy:

1
FcgidWrapper "D:/wamp/bin/php/php5.3.x/php-cgi.exe" .php

Lub, jeśli nie chcemy, żeby do konfiguracji został użyty ten sam plik INI dla domyślnego PHP:

1
FcgidWrapper "D:/wamp/bin/php/php5.3.x/php-cgi.exe -c D:/wamp/bin/php/php5.3.x/php.ini" .php

Druga wersja jest zapewne tą bardziej pożądaną :)

Źródła: [1], [2], [2], [3], oraz własne metody prób i błędów :)

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 »

Interpolacja między kolorami

Dodany: 20 stycznia, 2015 | Kategoria: PHP

Mamy dwa kolory, chcielibyśmy uzyskać kolor pomiędzy nimi wyrażony w procentach (0% – 100%).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function mixcolors($color1, $color2, $amt)
{
$amt = min(1, max($amt, 0));

$c1_R = hexdec(substr($color1, 0, 2));
$c1_G = hexdec(substr($color1, 2, 2));
$c1_B = hexdec(substr($color1, 4, 2));

$c2_R = hexdec(substr($color2, 0, 2));
$c2_G = hexdec(substr($color2, 2, 2));
$c2_B = hexdec(substr($color2, 4, 2));

$d1 = $c1_R + (($c2_R - $c1_R) * $amt);
$d2 = $c1_G + (($c2_G - $c1_G) * $amt);
$d3 = $c1_B + (($c2_B - $c1_B) * $amt);

$m_p1 = sprintf('%02x', round($d1));
$m_p2 = sprintf('%02x', round($d2));
$m_p3 = sprintf('%02x', round($d3));

return '#' . $m_p1 . $m_p2 . $m_p3;
}

Wynik funkcji 

1
mixcolors('FF0000','00FF00', X)

gdzie X to kolejno 0, 0.25, 0.5, 0.75, 1

ff0000
bf4000
808000
40bf00
00ff00

Tagi: , , , , Brak komentarzy »

Zarezerwowanie pamięci pod wyświetlenie Fatal Errora w PHP

Dodany: 22 listopada, 2014 | Kategoria: PHP

Jeśli w PHP zabraknie pamięci, to wyświetli się stosowny komunikat na ten temat i skrypt wysypie się.
Można jednak zarezerwować sobie trochę pamięci, aby wyświetlić własny komunikat o błędzie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

error_reporting(0);

ini_set('memory_limit', '1M');

$memory = str_repeat('x', 262144);
   
register_shutdown_function('handleFatalError');
   
function handleFatalError() {
    global $memory;
    unset($memory);
    $error = error_get_last();
    echo $error['message'] . PHP_EOL . $error['type'] . PHP_EOL . $error['type'] . PHP_EOL . $error['file'] . PHP_EOL . $error['line'] . PHP_EOL;
}

// uncomment one of them:

// this_function_doesnt_exists();

// or

$memory_error = str_repeat('x', 500000);

// zaczerpnięte z kodu Yii 2

Brak komentarzy »

Cross-domain font

Dodany: 17 lipca, 2014 | Kategoria: Apache, PHP

Jak wyświetlić czcionkę gdy CSS i owy plik pobierane są z innej domeny (np. emulujemy sobie lokalnie chmurę bo takie środowisko czeka nas na serwerach klienta i jest inna zmyślona domena, mimo, że wciąż 127.0.0.1).

1
2
3
4
5
<FilesMatch "\.(ttf|otf|eot|woff)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>
Tagi: , , , , , , , Brak komentarzy »