Prorel & symfony
|
|
Считаем сумму по полю в админке
$c2 = new Criteria();
$this->addSortCriteria($c2);
$this->addFiltersCriteria($c2);
$c2->addAsColumn('h1', 'SUM(' . PaymentPeer::SUMMA.')');
$c2->addAsColumn('h2', 'SUM(' . PaymentPeer::SUMMA_CORRECTOR.')');
$r = PaymentPeer::doSelectRS($c2);
while ($r->next())
{
$row = $r->getRow();
$this->c1 = $row[10];
$this->c2 = $row[11];
}
|
|
|
Логика symfony
|
|
ставим и забираем cookie
в акшине
$this->getResponse()->setCookie('mycookie', $value);
$this->getResponse()->setCookie('mycookie', $value, $expire, $path, $domain, $secure);
$string = $this->getRequest()->getCookie('mycookie');
|
29 июля 2010 г. |
|
|
|
Doctrine
|
|
Переводим таблицу i18n
В action
$this->page = Doctrine::getTable('Page')
->createQuery('a')
->leftJoin('a.Translation t')
->where('a.id=?',array($request->getParameter('id')))
->fetchOne();
$this->page->setDefaultCulture($request->getParameter('from_lang'));
$translate = new GoogleTranslateApi;
$translate->FromLang = $request->getParameter('from_lang');
$translate->ToLang = $request->getParameter('to_lang');
$title = $translate->translate($this->page->getTitle());
$content = $translate->translate($this->page->getContent());
$seo_t = $translate->translate($this->page->getSeoTitle());
$seo_k = $translate->translate($this->page->getSeoKeyword());
$seo_d = $translate->translate($this->page->getSeoDescription());
$this->page->setDefaultCulture($request->getParameter('to_lang'));
$this->page->setTitle($title);
$this->page->setContent($content);
$this->page->setSeoKeyword($seo_t);
$this->page->setSeoDescription($seo_d);
$this->page->save();
$this->redirect('page/edit?id='.$this->page->getId());
|
28 июля 2010 г. |
|
|
|
Doctrine
|
|
Работа с древовидными структурами
Проверяем есть ли дети или родители
$hasChildren = $category->getNode()->hasChildren();
$hasParent = $category->getNode()->hasParent();
Получаем родителей
$projects->getNode()->getChildren()
Передвигаем
if($a->getNode()->hasNextSibling())
{
$p = $a->getNode()->getNextSibling();
$a->getNode()->moveAsNextSiblingOf($p);
}
|
27 июля 2010 г. |
|
|
|
Работа с формами в sf1.2
|
|
Конфигурируем виджет с датой
$this->widgetSchema['birthday'] = new sfWidgetFormDate(array('format'=>'%day%-%month%-%year%','years'=>myUser::getYears()));
|
26 июля 2010 г. |
|
|
|
PHP
|
|
Делаем бекап на сервере
TODAY=$(date +%c)
echo "Synchronization started: "$TODAY > /mnt/data/vhosts/rsync_daily.log
cd /var/www/vhosts
/usr/bin/rsync -az --delete --verbose --keep-dirlinks ./www.pressa.ru /mnt/data/backup/www/daily >> /mnt/data/vhosts/rsync_daily.log 2>&1
TODAY=$(date +%c)
echo "Synchronization ended: "$TODAY >> /mnt/data/vhosts/rsync_daily.log
/usr/bin/mysqldump --opt -u **** -p'*****' dbname > /mnt/data/backup/mysql/daily/pressa.sql
/usr/bin/mysqldump --opt -u **** -p'*******' proftpd_admin > /mnt/data/backup/mysql/daily/proftpd_admin.sql
|
23 июля 2010 г. |
|
|
|
Doctrine
|
|
Связи в schema.yml
Связь один ко многим
Shedule:
actAs:
Timestampable: ~
columns:
id:
type: integer(4)
primary: true
autoincrement: true
predmet_id:
type: integer(4)
notnull: true
relations:
Predmet:
local: predmet_id
onDelete: CASCADE
foreign: id
|
21 июля 2010 г. |
|
|
|
Doctrine
|
|
Перегружаем сетер
В модели пишем
public function setSchoolId($value)
{
$this->setSchoolName('ssss');
$this->_set('school_id', $value);
}
|
21 июля 2010 г. |
|
|
|
Работа с формами в sf1.2
|
|
Виджеты
Select
$this->widgetSchema['num_day'] = new sfWidgetFormChoice(
array('expanded'=>false,'choices' => myUser::getDayWeek()));
|
21 июля 2010 г. |
|
|
|
Doctrine
|
|
Doctrine symfony постраничка pager
Реализация постраничной навигации.
В action пишу
$q = Doctrine_Query::create()
->from('School s')
->leftJoin('s.Translation t');
$this->pager = new sfDoctrinePager('School',2);
$this->pager->setQuery($q);
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
В шаблоне
getResults() as $school): ?>
Сам хелпер
function pager_navigation($pager, $uri)
{
$navigation = '';
if ($pager->haveToPaginate())
{
$uri .= (preg_match('/\?/', $uri) ? '&' : '?').'page=';
// First and previous page
if ($pager->getPage() != 1)
{
$navigation .= link_to(image_tag('/sf/sf_admin/images/first.png', 'align=absmiddle border=0'), $uri.'1');
$navigation .= link_to(image_tag('/sf/sf_admin/images/previous.png', 'align=absmiddle border=0'), $uri.$pager->getPreviousPage()).' ';
}
// Pages one by one
$links = array();
foreach ($pager->getLinks() as $page)
{
$links[] = link_to_unless($page == $pager->getPage(), $page, $uri.$page);
}
$navigation .= join(' ', $links);
// Next and last page
if ($pager->getPage() != $pager->getLastPage())
{
$navigation .= ' '.link_to(image_tag('/sf/sf_admin/images/next.png', 'align=absmiddle border=0'), $uri.$pager->getNextPage());
$navigation .= link_to(image_tag('/sf/sf_admin/images/last.png', 'align=absmiddle border=0'), $uri.$pager->getLastPage());
}
$navigation .= ' <b>'.pager_info($pager).'</b>';
}
|
19 июля 2010 г. |
|
|
|
Работа с формами в sf1.2
|
|
Изменение декоратора формы
В классе формы
public function configure()
{
$custom_decorator = new sfWidgetFormSchemaFormatterDefList($this->getWidgetSchema());
$this->getWidgetSchema()->addFormFormatter('deflist', $custom_decorator);
$this->getWidgetSchema()->setFormFormatterName('deflist');
}
class sfWidgetFormSchemaFormatterDefList extends sfWidgetFormSchemaFormatter {
protected
$rowFormat = '<div class="row">%label%<dd>%error%%field%%help%%hidden_fields%</div>',
$helpFormat = '<span class="help">%help%</span>',
$errorRowFormat = '<dt class="error">Errors:</dt><dd>%errors%</dd>',
$errorListFormatInARow = '<ul class="error_list">%errors%</ul>',
$errorRowFormatInARow = '<li>%error%</li>',
$namedErrorRowFormatInARow = '<li>%name%: %error%</li>',
$decoratorFormat = '<dl id="formContainer">%content%</dl>';
}
|
19 июля 2010 г. |
|
|
|
Работа с формами в sf1.2
|
|
Сохранение формы
В action
if ($request->isMethod('post'))
{
$this->contact_form->bind($request->getParameter('contact'),$request->getFiles('contact'));
if ($this->contact_form->isValid())
{
$this->contact_form->save();
$this->getUser ()->setFlash ( 'message', __('Готово') );
}
}
|
19 июля 2010 г. |
|
|
|