sudo -s
nginx=stable # use nginx=development for latest development version
echo «deb http://ppa.launchpad.net/nginx/$nginx/ubuntu lucid main» > /etc/apt/sources.list.d/nginx-$nginx-lucid.list
apt-key adv —keyserver keyserver.ubuntu.com —recv-keys C300EE8C
apt-get update
apt-get install nginx
Установить nginx на 64-битный Debian Linux
Темизация Webform для Drupal 7 или куда положить шаблон
Очень просто решается задача с любой веб-формой на Drupal, так как её можно решить зачастую не прибегая к написанию кода. Самостоятельно при помощи конструктора добавляются поля формы, а затем выставляются их свойства.
Но как быть в случае сложной формы, в которой принципиальное значение имеет расположение полей ввода.
К примеру, это таблица, в ячейках которой имеются поля для ввода и, кроме того, при изменении полей должен выполняться наш javascript.
Требуется скопировать из папки (директории): sites/all/modules/webform/templates
файл webform-form.tpl.php
в папку (директорию): sites/all/themes/mytheme
где mytheme — это ваша тема.
Теперь переименуйте его в webform-form-[nid].tpl.php где [nid] — id ноды, в которой будет стилизована форма.
Всё что есть в этом файле оставляем как есть, лишь добавляем в верхнюю его часть до <?php ваш html-код, а в местах где нужно вставить поле ввода помещаем такую конструкцию: <?=drupal_render($form['submitted']['test1'])?>
где test1 — это название вашего поля
В случае с таблицей выглядит так:
<table> <tbody> <tr> <td>Test#1</td> <td>Test#2</td> <td><?=drupal_render($form['submitted']['test1'])?></td> <td><?=drupal_render($form['submitted']['test2'])?></td> </tr> </tbody> </table> |
Не забудьте очистить кэш Drupal-а .
Выполнение javascript по нажатию на поле ввода.
В функцию mymodule_form_webform_client_form_[nid]_alter, где mymodule — название вашего модуля, а [nid] — как обычно id ноды добавляю аттрибуты к полям:
function mymodule_form_webform_client_form_34_alter(&$form, &$form_state, $form_id) { $form["submitted"]["servers_quantity"]["#attributes"]['onkeyup']='alert("test");'; } |
Сработает javascript: alert(‘test’);
Skype хорошенечко прилёг
Опять ненадолго прикладывался полежать скайп.
Подозреваю что ошибка всё та же. Учитывая что скайп является пиринговой сетью, у него есть критическая масса работы сети без супер-ноды.
Zend Framework: как я прикручивал Zend_Paginator (постраничный вывод)
Начиная изучать Zend Framework самопроизвольно собрался макет для управления таблицой и её содержимыми в базе данных. Сейчас расскажу как именно.
Первые шаги с Zend я делал по примерам Роба Аллена.
В частности по этому учебному материалу.
Предлагалось собрать табличку альбомов. Добавлять, редактировать и удалять в ней записи. И в общем-то всё.
Обычный вывод на страницу списка альбомов.
Захотелось, изучить как работает Zend_Paginator и сделать постраничный вывод.
Правда, я чтобы не обезьянничать на 100%, решил назвать в своём примере не Albums, а Pages. (ну типа пишу свою CMS и у меня уже страницы правятся из базы, админка на ZF)
И как только я начал искать как же прикрутить пейджинг или пейджинэйтор, всё время нарывался на статьи и примеры далёкие от абстрактной модели работы с базами данных.
Предлагаю использовать Zend_Db_Table_Abstract вместо привычно встречающихся в примерах Zend_Db_Table и Zend_Db_Select.
К файлам темплейтов не придираться, мне тоже не нравится мешанина php-кода + HTML, но такое вот понятие MVC у Zend.
У меня получилось вот что.
Controller (application/controllers/IndexController.php) выглядит так:
<?php class IndexController extends Zend_Controller_Action { public function init() { $view = new Zend_View(); } public function indexAction() { Zend_View_Helper_PaginationControl::setDefaultViewPartial('/pagination.phtml'); $pages = new Application_Model_DbTable_Pages(); $num = 10; $page = $this->_getParam('page'); $select = $pages->select(); $result = $this->view->table = $pages->fetchAll($select)->toArray(); $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($result)); $paginator->setItemCountPerPage($num); $paginator->setCurrentPageNumber($page); $paginator->setView($this->view); $this->view->paginator = $paginator; } public function addAction() { // action body $this->view->pageTitle = "Add"; $this->view->pageKeywords = "keywords"; $this->view->pageDescription = "description"; $form = new Application_Form_Page(); $form->submit->setLabel('Add'); $this->view->form = $form; if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $artist = $form->getValue('artist'); $title = $form->getValue('title'); $creation_date = $form->getValue('creation_date'); $pages = new Application_Model_DbTable_Pages(); $pages->addPage($artist, $title,$creation_date); $this->_helper->redirector('index'); } else { $form->populate($formData); } } } public function editAction() { // action body $this->view->pageTitle = "Edit"; $form = new Application_Form_Page(); $form->submit->setLabel('Save'); $this->view->form = $form; if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $id = (int)$form->getValue('id'); $artist = $form->getValue('artist'); $title = $form->getValue('title'); $creation_date = $form->getValue('creation_date'); $pages = new Application_Model_DbTable_Pages(); $pages->updatePage($id, $artist, $title,$creation_date); $this->_helper->redirector('index'); } else { $form->populate($formData); } } else { $id = $this->_getParam('id', 0); if ($id > 0) { $pages = new Application_Model_DbTable_Pages(); $form->populate($pages->getPage($id)); } } } public function deleteAction() { $this->view->pageTitle = "Delete"; if ($this->getRequest()->isPost()) { $del = $this->getRequest()->getPost('del'); if ($del == 'Yes') { $id = $this->getRequest()->getPost('id'); $pages = new Application_Model_DbTable_Pages(); $pages->deletePage($id); } $this->_helper->redirector('index'); } else { $id = $this->_getParam('id', 0); $pages = new Application_Model_DbTable_Pages(); $this->view->page = $pages->getPage($id); } } } |
Шаблон (application/views/scripts/pagination.phtml) пагинатора:
<?php if ($this->pageCount) { ?> <div class="paginationControl"> <?php if (isset($this->previous)) { ?> <a href="<?= $this->url(array('page' => $this->previous)); ?>"><</a> | <?php } else { ?> <span class="disabled"><</span> | <?php } foreach ($this->pagesInRange as $page) { if ($page != $this->current) { ?> <a href="<?= $this->url(array('page' => $page)); ?>"><?= $page; ?></a> | <?php } else { ?> <?= $page; ?> | <?php } } if (isset($this->next)) { ?> <a href="<?= $this->url(array('page' => $this->next)); ?>"> > </a> <?php } else { ?> <span class="disabled">></span> <?php } ?> </div> <?php } ?> |
DB модель (application/models/DbTable/Pages.php)
<?php class Application_Model_DbTable_Pages extends Zend_Db_Table_Abstract { protected $_name = 'pages'; public function getPage($id) { $id = (int)$id; $row = $this->fetchRow('id = ' . $id); if (!$row) { throw new Exception("Could not find row $id"); } return $row->toArray(); } public function addPage($artist, $title, $creation_date) { $data = array( 'artist' => $artist, 'title' => $title, 'creation_date' => $creation_date, ); $this->insert($data); } public function updatePage($id, $artist, $title,$creation_date) { $data = array( 'artist' => $artist, 'title' => $title, 'creation_date' => $creation_date, ); $this->update($data, 'id = '. (int)$id); } public function deletePage($id) { $this->delete('id =' . (int)$id); } } |
Здесь к пейджингу относится только название таблицы в базе данных.
И сам (application/views/scripts/index/index.phtml):
<?php $this->title = "My pages"; $this->headTitle($this->title); ?> <p><a href="<?= $this->url(array('controller'=>'index','action'=>'add'));?>">Add new page</a></p> <table> <tr> <th>Title</th> <th>Artist</th> <th>Date</th> <th> </th> </tr> <?php if (count($this->paginator)) { ?> <?php foreach ($this->paginator as $item) {?> <tr> <td><?= $item['title']; ?></td> <td><?= $item['artist']; ?></td> <td><?= $item['creation_date']; ?></td> <td> <a href="<?= $this->baseUrl; ?>/index/edit/id/<?= $item['id'];?>">Edit</a> <a href="<?= $this->baseUrl; ?>/index/delete/id/<?= $item['id'];?>">Delete</a> </td> </tr> <?php } } ?> </table> <?= $this->paginationControl($this->paginator); ?> |
Вот эти знания мне пригодились в реализации постраничного вывода на Zend Framework.
P.S.:
Если, у кого-то не получилось, пишите в комменты вопросы.
MySQL сервер не обновился до 5-ой версии командой apt-get upgrade
Ошибочка крылась в том, что пользователь debian-sys-maint не имел прав.
‘Access denied for user ‘debian-sys-maint’@'localhost’ (using password: YES)’
Пользователь этот используется для различных скриптов обновления.
Чтобы он получил доступ, необходимо выполнить следующее:
Открыть файл /etc/mysql/debian.cnf и подсмотреть какой у него пароль.
Затем назначить пользователю mysql-сервера этот же пароль, например таким образом:
killall mysqld
mysqld_safe --skip-grant-table
(нажать CTRL+Z)
bg
mysql -u root
UPDATE mysql.user SET Password = PASSWORD( 'пароль из файла debian.cnf' ) WHERE user.Host = 'localhost' AND user.User = 'debian-sys-maint';
exit
fg
(нажать CTRL+С, немного подождать)
/etc/init.d/mysql start
Вот и всё.
Ах да, вот ещё что P.S.:
Новая версия при старте пишет, для многих пугающую фразу, но вы не бойтесь.
Checking for corrupt, not cleanly closed and upgrade needing tables..
Если сомневаетесь, что ваши таблицы цельные и рабочие, то выполнить проверку можно так:
mysqlcheck --check-upgrade --all-databases --auto-repair -u root -ppassword
mysql_upgrade --force -u root -ppassword
Установка Zend Framework на Denwer
1. Качаем Денвер http://www.denwer.ru/
2. Качаем пакет расширений http://www.denwer.ru/packages/php5.html
3. Ставим.
4. Пробуем инициализировать PEAR запускаем \usr\local\php5\go-pear.bat если ошибка does not have a signature тогда меняем файл. Изменения выделены.
===========================
@ECHO OFF
set PHP_BIN=php.exe
%PHP_BIN% -d phar.require_hash=0 -d output_buffering=0 PEAR\go-pear.phar
pause
===========================
Запускаем снова и следуем указаниям скрипта.
5. pear channel-discover pear.zfcampus.org
6. pear install zfcampus/zf
Тестируем: zf show version => Zend Framework Version: 1.10.0
Источник: http://php5.com.ua/blog/shpargalki/165.html
Чумачечая Весна пришла и крышу нам с тобой снесла
Чудеснейший видео-клип от Потапа и Насти:
Хит-парад doBlox.ru
Лидеры просмотров на видео-хостинге doBlox.ru
И так, подвожу итоги лидеров просмотров на видео-хостинге дуБлокс (доблокс).
Лидером просмотров является Александр Копьев из Украины предлагающий всего два видео-ролика, но с максимальным количеством просмотров. На видео предлагается know-how ноу-хау утепления жилища при помощи заклейки окон плёнкой похожей на пищевую.
Вторую позицию занимает adzick yegorjan с видео-драмой «I Spit on Your Grave«.
На третьем месте находится Александр Наговерко с самой просматриваемой серией из сериала «Реальные пацаны«.

SAPE — покупка/продажа ссылок