Показаны сообщения с ярлыком howto. Показать все сообщения
Показаны сообщения с ярлыком howto. Показать все сообщения

вторник, 3 апреля 2012 г.

Magento: Добавление нового атрибута для кастомера

В Magento Community Edition присутствует возможность управления атрибутами продуктов. Но что если нам нужно создать атрибут для кастомера? В таком случае нам на помощь приходит mysql upgrade.

Допустим, я хочу создать атрибут "navoq_textmagic_phone", в котором будет храниться телефон кастомера для моего модуля. Пример кода:
/* @var $installer Navoq_TextMagic_Model_Resource_Setup */
$installer = $this;

$installer->startSetup();

$installer->addAttribute('customer', 'navoq_textmagic_phone', array(
    'label'    => 'Phone',
    'visible'  => true,
    'required' => false,
    'type'     => 'text',
    'input'    => 'text'
));

/** @var $eavConfig Mage_Eav_Model_Config */
$eavConfig = Mage::getSingleton('eav/config');

/** @var $attribute Mage_Customer_Model_Attribute */
$attribute = $eavConfig->getAttribute('customer', 'navoq_textmagic_phone');
$attribute->addData(array(
    'is_used_for_customer_segment' => true,
    'used_in_forms'   => array('customer_account_edit', 'adminhtml_customer'),
    'is_user_defined' => true,
    'backend_type'    => 'varchar',
    'is_system'       => false,
    'is_visible'      => true,
    'is_unique'       => false,
    'sort_order'      => 250
))->save();

$installer->endSetup();

Результатом выполнения апгрейда будет новый атрибут кастомера. Таким способом можно создавать атрибуты для разных сущностей: customer, customer_address, etc. Их полный список можно посмотреть в таблице "eav_entity_type".
Читать далее

Настройка деплоймента в PhpStorm

Деплоймент (deployment) - очень важный момент в работе разработчика. Я напомню, что локальную разработку я веду на FreeBSD VM, на которой настроены все необходимые веб-сервисы. Данный способ разработки позволяет эмулировать реальную среду продакшена, где будет работать мой код. Раньше я просто расшаривал свои проекты по Samba, сканировал необходимую папку и работал с ней удаленно. У данного способа есть большой минус - скорость работы. PhpStorm индексит по Samba очень медленно, иногда может надолго подвисать.

Потому сейчас я работаю с локальной папкой, а PhpStorm все автоматически аплоадит (деплоит) по SFTP на виртуальную машину. Так IDE работает быстрее, индексация проекта теперь занимает намного меньше времени.

Перейдем от слов в делу. Допустим, у меня есть локальная папка "community" с Magento CE и такая же папка на VM.

1. Открываем настройки деплоймента Project Settings => Deployment:


2. Добавляем новый сервер. Для этого нужно нажать на плюсик, дать ему имя и выбрать тип соединения. В моем случае это SFTP:


3. Заполняем табу "Connection":


Стоит заметить, что в поле "Root path" лучше указывать директорию VM, в которой лежат все ваши проекты, чтобы можно было использовать данный сервер и для их деплоя.

4. Заполняем табу "Mappings":


- "Local path": локальная папка с проектом
- "Deployment path on server '%YOUR_SERVER_NAME%'": удаленная папка с проектом

5. Заполняем табу "Excluded Paths":


Здесь можно настроить папки, которые мы не ходим деплоить на VM и наоборот. В данном случае я указал что не хочу получать с удаленного сервера содержимое папки "var", в которой хранится кеш, репорты, логи и прочая служебная информация о проекте.

6. Настраиваем автоматический аплоад на удаленный сервер, чтобы после каждого сохранения файла, он PhpStorm отправлял его на сервер. Для этого нужно зайти в Project Settings => Deployment => Options и выставить чекбоксы вот так:


Поздравляю, все настроено. Открываем любой файл, делаем в нем изменение, сохраняем и видим что PhpStorm автоматически загрузил этот файл на сервер:


Как вы видите, все просто. Данный способ еще можно использовать для деплоя небольших сайтов на продакшен-сервер.

Читать далее

пятница, 24 февраля 2012 г.

Очистка неактивной оперативной памяти в Mac OS X

В Mac App Store существует очень много программ для очистки неактивной оперативной памяти в вашей системе. Я, например, долгое время пользовался Memory Sweeper Pro. Но, оказывается, можно легко обойтись без всего этого шлака. Для этого заходим в Терминал и вводим команду:
purge

Ждем несколько секунд (система может немного подвиснуть) и все - вся неактивная память стала свободной ;)
Читать далее

четверг, 23 февраля 2012 г.

Изолируем тесты в PHPUnit

Вчера столкнулся с ситуацией, когда из-за неправильного кода (в темплейте инициализировалась функция) падали тесты. Например, есть файл index.phtml с таким содержанием:
...
function showMenu()
{
    echo '
  • item1
  • item2
  • item3
'; } ...

Функция showMenu() выводит меню на странице. Программист по каким-то своим соображениям не захотел ее выносить в php-файл. Если мы заходим покрыть данный файл тестами, то уже на втором тесте получим фатал:
PHP Fatal Error: Cannot redeclare showMenu() (previously declared in /home/test/index.phtml) 

Самым лучшим выходом из данной ситуации будет рефакторинг кода: вынести функцию в php-файл или обернуть ее проверкой function_exist():
...
if (!function_exist('showMenu')) {
    function showMenu()
    {
        echo '
  • item1
  • item2
  • item3
'; } } ...

Но что делать когда мы не имеем права редактировать существующий код (в моей практике такое бывает очень часто)? Тогда нам на помощь приходят аннотации PHPUnit @runInSeparateProcess и @runTestsInSeparateProcesses. Они помогают изолировать тест-кейсы, запуская их в отдельных процессах.

@runTestsInSeparateProcesses позволяет изолировать все тест-кейсы:
/**
 * @runTestsInSeparateProcesses
 **/
class MyTest extends PHPUnit_Framework_TestCase
{
    public function testTest1()
    {
        // ...
    }

    public function testTest2()
    {
        // ...
    }
}

@runTestsInSeparateProcesses позволяет изолировать определенные тест-кейсы:
class MyTest extends PHPUnit_Framework_TestCase
{
    public function testTest1()
    {
        // ...
    }

    /**
     * @runInSeparateProcess
     **/
    public function testTest2()
    {
        // ...
    }
}

Надеюсь, эти аннотации помогут вам так же сильно, как помогли сегодня мне. Программируйте правильно о_О
Читать далее

воскресенье, 19 февраля 2012 г.

Полезные команды Git

Я начал использовать git совсем недавно и не могу назвать себя git экспертом. Но каждый день я сталкиваюсь с ситуациями и командами, описание которых, думаю, будет полезным для вас. Описание даю на английском, так как это будет понятнее.

Create and Checkout a New Branch
#branches from currently checked out directory
git checkout -b 

Checkout a Remote Branch
git checkout -b  origin/

Abort Changes of a File
git checkout -- 

Modify the Previous Commit’s Message
git commit --amend

Partial Change Checkin
git add --edit

Undo the Previous Commit
git revert HEAD^

Temporarily Stash Changes, Restore Later
# After changes have been made...
git stash

# Do some other stuff here, like switch branches, merge other changes, etc.

#Re-apply the changes
git stash pop

Delete a Remote Branch
git push origin :

Pull in the Latest from a Shared Repository
# Add a remote branch
git remote add  
 # For example:  git remote add lightfaceOfficial git://github.com/darkwing/LightFace.git

# Get changes from that branch
git fetch 

Tagging, Deleting, and Pushing Tags
# Create a Tag
git tag 

# Delete the tag
git tag -d 

# Push Tags
git push --tags

Who F’d it All Up?
git blame 

Читать далее

пятница, 16 декабря 2011 г.

Как узнать количество места в *nix

Первым делом читаем:
$ man df

Если после этого все-равно ничего не получается, то подскажу несколько примеров использования данной утилиты
1. Узнать общее количество места на дисках:
$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a    496M    334M    122M    73%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ad0s1e    1.9G     30M    1.7G     2%    /tmp
/dev/ad0s1f     13G     11G    1.1G    91%    /usr
/dev/ad0s1d    2.9G    881M    1.8G    32%    /var

2. Узнать количество месте в определенной папке:
$ du -hd 1 /var
2.0K    /var/.snap
2.0K    /var/account
6.0K    /var/at
2.0K    /var/audit
 14K    /var/backups
4.0K    /var/crash
4.0K    /var/cron
765M    /var/db
2.0K    /var/empty
2.0K    /var/heimdal
 96M    /var/log
 19M    /var/mail
4.0K    /var/msgs
 52K    /var/named
2.0K    /var/preserve
 56K    /var/run
2.0K    /var/rwho
 20K    /var/spool
320K    /var/tmp
 24K    /var/yp
2.0K    /var/games
881M    /var

Где 1 - уровень вложенности.
Читать далее

пятница, 14 октября 2011 г.

Реиндекс в Magento с помощью модели

Иногда необходимо сделать реиндекс в Magento прямо в PHP коде. Сделать это можно так:
$processCollection = Mage::getResourceModel('index/process_collection');
/** @var $process Mage_Index_Model_Process */
foreach ($processCollection as $process) {
    $process->reindexAll();
}

Читать далее