img { max-width: 100%; height: auto; width: auto\9; /* ie8 */ }
Ярлыки
.htaccess
(4)
тестирование
(8)
шаблоны проектирования
(3)
css
(5)
Debian
(6)
docker
(2)
Doctrine2
(6)
Git
(6)
html
(4)
java
(6)
javascript
(13)
jquery
(11)
LFS
(3)
linux
(23)
mac os
(4)
mod_rewrite
(2)
MSSQL
(4)
MySQL
(18)
ORM Doctrine
(17)
patterns
(3)
PDO
(3)
perl
(7)
PHP
(64)
PHPUnit
(8)
Python
(15)
SEO
(2)
Silex
(1)
SimpleXML
(1)
SQL
(14)
ssh
(4)
Ubuntu
(24)
Yii1
(1)
Zend Framework
(19)
ZendFramework2
(8)
вторник, 24 сентября 2013 г.
CSS. Адаптивный дизайн и эластичные изображения.
вторник, 17 сентября 2013 г.
ZendFramework2. Установка макета в модуле и контроллере.
В модуле
В контроллере
... use Zend\ModuleManager\ModuleManager; class MyModule implements AutoloaderProviderInterface { public function init(ModuleManager $moduleManager) { $sharedEvents = $moduleManager->getEventManager() ->getSharedManager(); $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { // Событие сработает при вызове ActionController // в пространстве имен MyModule. $controller = $e->getTarget(); $controller->layout('layout/index'); }, 100); } }
В контроллере
class IndexController extends AbstractActionController { public function indexAction() { $this->layout('layout/index'); return array(); } }
понедельник, 16 сентября 2013 г.
ZendFramework2. Перевод сообщений валидатора на русский язык.
Для того чтобы валидаторы заговорили по-русски или на любом другом языке, а это сообщения об ошибках в формах и тд, делаем следующее:
А так же можем вообще добавить свой файл переводов. Мне, например, он понадобился для локализации сообщений модуля ZfcUser, которые просто заданы как свойства контроллера.
Ну и сам файл переводов создаем module/MyModule/language/ru.php
namespace MyModule; use Zend\ModuleManager\Feature\AutoloaderProviderInterface; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; use Zend\Validator\AbstractValidator; class Module implements AutoloaderProviderInterface { ... $translator = $e->getApplication()->getServiceManager() ->get('translator'); $translator->addTranslationFile( 'phpArray', './vendor/zendframework/zendframework/resources/languages/ru/Zend_Validate.php', 'default', 'ru_RU' ); AbstractValidator::setDefaultTranslator($translator); ... }
А так же можем вообще добавить свой файл переводов. Мне, например, он понадобился для локализации сообщений модуля ZfcUser, которые просто заданы как свойства контроллера.
... $translator->addTranslationFile( 'phpArray', './module/MyModule/language/ru.php', 'default', 'ru_RU' ); ...
Ну и сам файл переводов создаем module/MyModule/language/ru.php
return array( 'Authentication failed. Please try again.' => 'Неверный пароль или логин. Попробуйте еще раз.' );
воскресенье, 15 сентября 2013 г.
MySQL. Триггер.
DELIMITER | CREATE TRIGGER update_mytable AFTER INSERT ON mytable FOR EACH ROW BEGIN INSERT INTO another_table SET my_column = 'my_value', row_id = NEW.id; END;
четверг, 12 сентября 2013 г.
ZendFramework2. Совместная работа ScnSocialAuth и CdliTwoStageSignup.
Два очень полезных модуля для Zend Framework 2.
Которые не хотят работать вместе из коробки.
Все действия будут в контексте модуля Application из Skeleton.
В контроллере User модуля ScnSocialAuth, в действии register напрямую вызывается действие register модуля ZfcUser.
Как результат мы видим обычную форму регистрации со всеми полями,
несмотря на то, что все плагины подключены в нужной последовательности.
Все что мне нужно, чтобы вместо него вызывалось действие email-verification модуля CdliTwoStageSignup, которое отвечает за отрисовку формы первого этапа регистрации с проверкой почты.
1. Создаем свой контроллер, расширящий
\ScnSocialAuth\Controller\UserController
Application/src/Application/Controller/SocialAuthController.php
по аналогии с фабрикой из ScnSocialAuth
Application/src/Application/Service/SocialAuthControllerFactory.php
Application/config/module.config.php
Которые не хотят работать вместе из коробки.
Все действия будут в контексте модуля Application из Skeleton.
В контроллере User модуля ScnSocialAuth, в действии register напрямую вызывается действие register модуля ZfcUser.
Как результат мы видим обычную форму регистрации со всеми полями,
несмотря на то, что все плагины подключены в нужной последовательности.
Все что мне нужно, чтобы вместо него вызывалось действие email-verification модуля CdliTwoStageSignup, которое отвечает за отрисовку формы первого этапа регистрации с проверкой почты.
1. Создаем свой контроллер, расширящий
\ScnSocialAuth\Controller\UserController
Application/src/Application/Controller/SocialAuthController.php
namespace Application\Controller; use Zend\View\Model\ViewModel; class SocialAuthController extends \ScnSocialAuth\Controller\UserController { public function registerAction() { // вызываем контроллер CdliTwoStageSignup $zfcUserRegister = $this->forward() ->dispatch('cdlitwostagesignup_ev_controller', array('action' => 'email-verification')); /*if (!$zfcUserRegister instanceof ModelInterface) { return $zfcUserRegister; }*/ $viewModel = new ViewModel(); $viewModel->addChild($zfcUserRegister, 'zfcUserLogin'); $viewModel->setVariable('options', $this->getOptions()); $redirect = false; if ($this->getServiceLocator()->get('zfcuser_module_options') ->getUseRedirectParameterIfPresent() && $this->getRequest()->getQuery()->get('redirect')) { $redirect = $this->getRequest()->getQuery()->get('redirect'); } $viewModel->setVariable('redirect', $redirect); // подключаем шаблон оригинального модуля $viewModel->setTemplate('scn-social-auth/user/register'); return $viewModel; } }2. Создаем фабрику контроллера для первоначальной инициализации
по аналогии с фабрикой из ScnSocialAuth
Application/src/Application/Service/SocialAuthControllerFactory.php
namespace Application\Service; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class SocialAuthControllerFactory implements FactoryInterface { public function createService( ServiceLocatorInterface $controllerManager) { $mapper = $controllerManager->getServiceLocator() ->get('ScnSocialAuth-UserProviderMapper'); $hybridAuth = $controllerManager->getServiceLocator() ->get('HybridAuth'); $moduleOptions = $controllerManager->getServiceLocator() ->get('ScnSocialAuth-ModuleOptions'); $controller = new \Application\Controller\SocialAuthController(); $controller->setMapper($mapper); $controller->setHybridAuth($hybridAuth); $controller->setOptions($moduleOptions); return $controller; } }3. Настройки в конфигурации нашего модуля
Application/config/module.config.php
... 'router' => array( 'routes' => array( ... // создаем роут на наш контроллер 'social-auth' => array( 'type' => 'Literal', 'priority' => 2000, 'options' => array( 'route' => '/user', 'defaults' => array( 'controller' => 'zfcuser', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'register' => array( 'type' => 'Literal', 'options' => array( 'route' => '/register', 'defaults' => array( 'controller' => 'Application\Controller\SocialAuth', 'action' => 'register', ), ), ), ), ), ), ), 'controllers' => array( ... // регистрируем фабрику контроллера 'factories' => array( 'Application\Controller\SocialAuth' => 'Application\Service\UserControllerFactory', ), ),
вторник, 10 сентября 2013 г.
Ubuntu. Установка composer.
curl -s https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer
пятница, 6 сентября 2013 г.
MySQL. Добавление внешнего ключа.
В дополнение к заметкам об удалении внешнего ключа mysql
и возможных ошибках при удалении внешнего ключа innodb
CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `slug` varchar(255) NOT NULL, `title` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `slug` (`slug`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ALTER TABLE category ADD CONSTRAINT id_parent_id FOREIGN KEY (parent_id) REFERENCES category (id) ON UPDATE CASCADE ON DELETE CASCADE
Подписаться на:
Сообщения (Atom)