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

среда, 6 июня 2012 г.

PhpStorm: обрамляем выделенный текст в теги

Сегодня научимся обрамлять выделенный текст в теги.

Предположим, у нас есть текст "Text", который нужно обернуть тегом h1.


1. Выделяем текст



2. Нажимаем Cmd + Alt + J в Mac OS (Ctrl + Alt + J в Windows) и выбираем первый пункт выпадающего меню




3. Пишем необходимый тег и нажимаем Enter


Читать далее

пятница, 18 мая 2012 г.

Magento: Не работает addAttributeToFilter()?

Если вы удивляетесь почему код
$collection->addAttributeToFilter('color', '24');
не фильтрует коллекцию, это означает что в бекенде у данного атрибута не включен параметр "Used in product listing?". Как это ни странно, Magento добавляет атрибут в таблицу catalog_product_flat только если этот параметр включен. Если же он выключен, ни о какой фильтрации не может быть и речи. После включения "Used in product listing?" не забудьте сделать реиндекс.
Читать далее

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

Настройка деплоймента в 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 г.

О сравнениях в PHP

Поговорим немного о code style. В частности, о сравнениях. Я рекомендую всегда первым ставить то значение, с которым вы сравниваете. Например:
define('MY_AUTO', 'KIA');

if (MY_AUTO == $_GET['auto']) {
    echo "it's my auto!";
}

О красоте говорить не будем, так как это очень растяжимое понятие. Преимущество данной записи состоит в том, что вы не сможете случайно забыть одно равно и обезопасите себя от такой маленькой и досадной ошибки:
define('MY_AUTO', 'KIA');

if ($_GET['auto'] = MY_AUTO) {
    echo "it's my auto!";
}

Данная проверка всегда будет проходить. С первого раза и не поймешь в чем дело. При первом варианте такое не прокатит. Программируйте внимательно ;)
Читать далее

четверг, 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 

Читать далее

понедельник, 6 февраля 2012 г.

Используем Emoji в iOS 5 и Mac OS X Lion

Открыл для меня красивенные смайлики Emoji. Купил за 0.99$ апликейшен для iOS и такое же приложение для Mac OS X Lion. Оказалось, эти покупки были бесполезными , так как Emoji уже встроен в iOS 5/Mac OS X Lion.

Для влючения Emoji в iOS 5, нужно выполнить следующие действия:

1. Открываем Settings -> Keyboard:

2. Жмакаем на International Keyboards:

3. Добавляем новую раскладку Emoji:


4. Теперь у нас есть новая раскладка со смайлами:

Для использования Emoji в Mac OS X Lion выполняем следующее:

1. Открываем любое текстовое поле:

2. В верхнем меню приложения выбираем пунктПравка -> Специальные символы...:

3. И находим в отдельной категории Emoji смайлы:

4. Использовать смайлы можно простым перетаскиванием:

Надеюсь, хоть вы теперь не купите встроенный функционал iOS 5 и Mac OS X Lion Apple ;)

Читать далее

суббота, 4 февраля 2012 г.

Создание колонки VARCHAR с фиксированным размером в Magento mysql-upgrade

Вчера пытался с помощью mysql-upgrade добавить колонку VARCHAR (20) в существующую таблицу и получил exception при отработке апгрейда. Чтобы было представление о чем я говорю, в файле было примерно следующее:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/file'), 'file_name', array(
    'comment'     => 'Name of file',
    'nullable'    => true,
    'column_type' => Varien_Db_Ddl_Table::TYPE_VARCHAR,
    'length'      => 100
));

Это при том, что при добавлении таблицы колонка с такими же параметрами создается:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

/**
 * Create table 'navoq_backup/backup_list'
 */
$table = $adapter->newTable($installer->getTable('navoq_backup/file'))
    ->addColumn('file_name', Varien_Db_Ddl_Table::TYPE_VARCHAR,
        100, array('nullable'  => true), 'Name of file')
    ->setComment('Navoq Backup File List');
$adapter->createTable($table);

Мистика, не так ли? Но выход есть. Вернемся к первоначальному коду. Если добавить колонку таким образом:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/backup_list'), 'file_name', array(
    'comment'     => 'Name of file',
    'nullable'    => true,
    'column_type' => Varien_Db_Ddl_Table::TYPE_TEXT
));

У нас выполнится апгрейд и в таблице `navoq_backup_file` появится поле `file_name` типа TEXT. Но стоит нам добавить в предыдущий код параметр length:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/backup_list'), 'file_name', array(
    'comment'     => 'Name of file',
    'nullable'    => true,
    'column_type' => Varien_Db_Ddl_Table::TYPE_TEXT,
    'length'      => 100
));

И у нас создается то же поле `file_name` но типа VARCHAR и длинной в 100 символов. Enjoy ;)
Читать далее

вторник, 31 января 2012 г.

Git: подключаем новый удаленный репозиторий

Сегодня будем учиться подключать удаленный репозиторий к уже существующему. Для чего это нужно? Есть много вариантов. Например, мне это понадобилось для выполнения git cherry-pick из бранча одного репо в бранч другого. Итак, предположим, что вы сделали git clone и у вас есть 'origin' remote репозиторий. Если все так, то команда git remote покажет на экран следующую информацию:
$ git remote
origin

Сошлось? Прекрасно. Далее добавляем новый репозиторий с именем new_repo:
$ git remote add new_repo http://git.site.com/project/new_repo

Проверяем, что он добавился:
$ git remote
origin
new_repo

Получаем изменения из новой ветки:
$ git fetch new_repo

Удаленный репозиторий подключен. Список бранчей можно просмотреть с помощью команды:
$ git branch -r

Читать далее

понедельник, 30 января 2012 г.

PhpStorm: работа с разными CVS (SVN + Git) в одном проекте

На прошлой неделе возникла необходимость работы с SVN и Git на одном проекте. По-умолчанию, PhpStorm работает только с одной CVS. Например, если вы сделали git clone, а потом внутри проекта создали папку tests и сделали туда svn checkout, то IDE будет видеть только Git. То есть, выполнить какие-либо действия (up, commit, etc.) в папке с тестами будет невозможно. Но это можно легко исправить.

1. Открываем настройки:

2. Заходим в Project Settings -> Version Control. Если у вас проект на Git, то картинка будет примерно следующей:

3. Нажимаем Add и добавляем папочку tests:

После этого в списке меню Project Settings -> Version Control появится наша новая запись:

4. Сохраняем настройки. Теперь можно выполнять SVN-команды над папкой tests прямо из IDE.
Читать далее

пятница, 27 января 2012 г.

PhpStorm: включаем обрамление выделенного текста в кавычки или скобки

Моя основная IDE на работе и дома это PhpStorm. Причем, в обоих местах она лицензионная ;)

Эта система очень большая, почти каждый день я узнаю что-то новое о ней. Потому решил писать об этом в блоге.

Начнем с обрамления выделенного текста в кавычки или скобки. Сначала это нужно включить.

1. Открываем настройки:

2. Заходим в IDE Settings -> Editor -> Smart Keys и ставим галочку напротив Surround selection on typing quote or brace:

3. Сохраняем настройки и радуемся жизни. Теперь вы можете выделить текст и нажать символ кавычки/скобки, после чего текст будет обрамлен введенным символом.
Читать далее

четверг, 26 января 2012 г.

Как установить PHPUnit для MAMP

На работе я привык работать в CentOS/FreeBSD VM, на которой установлен Apache, nginx, PHP, MySQL и прочие необходимые инструменты для веб-разработки. Это удобно тем, что эта система максимально приближена к реальной обстановке проекта,чем минимизируются основные проблемы, связанные с настройкой различных сервисов.
Ну и VM всегда можно забекапить ;) По-этому, всегда можно безопасно экспериментировать.

Дома у меня MacBook с 2.5 Гб ОЗУ. С виртуалкой все очень тормозит. По-этому до того момента, пока я не разживусь еще одной планкой ОЗУ, приходится юзать MAMP. Вчера появилась задача настройки и запуска PHPUnit для MAMP. Приступим.

Для установки PHPUnit с помощью MAMP PEAR нам потребуется терминал с правами root-пользователя.

Сначала обноляем PEAR с помощью двух команд:
/Applications/MAMP/bin/php5/bin/pear channel-update pear.php.net
/Applications/MAMP/bin/php5/bin/pear upgrade pear

Теперь пришло время зарегистрировать соответствующий канал и установить PHPUnit:
/Applications/MAMP/bin/php5/bin/pear channel-discover pear.phpunit.de
/Applications/MAMP/bin/php5/bin/pear install phpunit/PHPUnit

PHPUnit теперь установлен, но чтобы запускаеть его с помощью терминала, нам нужно перенести его в $PATH:
mv /Applications/MAMP/bin/php5/bin/phpunit /usr/local/bin/phpunit

Для теста наберите:
phpunit --version

Вы увидите что-то вроде:
PHPUnit 3.6.9 by Sebastian Bergmann

Это все. Если есть вопросы, задавайте их в комментариях.
Читать далее