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: character, decimal, magento, separator, symbol Brak komentarzy »
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 »
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 »
Dodany: 4 listopada, 2015 | Kategoria: Magento, PHP
1 2
| cd /var/www/html/magento/shell
php indexer.php --reindex catalogsearch_fulltext |
Tagi: magento, reindex, solr Brak komentarzy »
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: apache, fastcgi, php, php5 Brak komentarzy »
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 »
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: adminhtml, layout, magento Brak komentarzy »
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: colors, linear, mix, percentage, php Brak komentarzy »
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 »
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: apache, chmura, cloud, cross-domain, filesmatch, font, fonts, php Brak komentarzy »