$posts = Doctrine_Query::create()
->from('Post p INDEXBY id')
->fetchArray()
;
на выходе получаем массив индексированный по реальным значениям id,
а не [0 => array(), 1 => array() ... ]
p.s. спасибо develop7 за наводку
$posts = Doctrine_Query::create()
->from('Post p INDEXBY id')
->fetchArray()
;
$lang = $request->getParameter('lang', 'ru');$query = "SELECT substring(`name`,1,1) as firstletterFROM `xxx_translation`WHERE `lang` = '".$lang."' ANDsubstring(`name`,1,1) <> ''GROUP BY substring(`name`,1,1)";$pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();$stmt = $pdo->prepare($query);$stmt->execute();$this->abc = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
<?php if ($abc): ?>
<ul id="abcList">
<?php foreach ($abc as $letter): ?>
<li><?php echo link_to($letter, '@user_list?search='.$letter.'&pos=start')?> </li>
<?php endforeach; ?>
</ul>
<br clear="all" />
<?php endif; ?>
ul#abcList li {
float: left;
display: inline;
list-style: none;
padding: 4px;
}
sudo aptitude install php5 apache2 php-pear php5-xdebug php-apc mysql-server phpmyadmin

.currentPage {
border: 1px solid #ff9900;
padding: 4px;
background: #eeeeff;
}
jQuery(document).ready(function($){
// try to find pager
pager = $('.sf_admin_pagination').html();
if (pager) {
var re = /(\s+)(\d+)(\s)+/;
var newstr = pager.replace(re, "$2");
$('.sf_admin_pagination').html(newstr);
}
Config:
tableName: sf_config
columns:
id: { type: integer(4), primary: true, autoincrement: true }
name: { type: string(32) }
value: { type: string(32) }
description: { type: string(1024) }
class myConfig extends sfConfig
{
public static function get($name, $default = null, $description = null)
{
if (!sfConfig::get($name))
{
$res = Doctrine::getTable('Config')->findOneByName($name);
if (!$res)
{
$c = new Config();
$c->setName($name);
$c->setValue($default);
$c->setDescription($description);
$c->save();
}
}
return (isSet(self::$config[$name]) ? self::$config[$name] : $default);
}
}
class myConfigFilter extends sfFilter
{
public function execute ($filterChain)
{
$configs = Doctrine::getTable('Config')->findAll();
foreach ($configs as $config)
{
sfConfig::set($config->getName(), $config->getValue());
}
$filterChain->execute();
}
}
myConfig:
class: myConfigFilter
$postDirName = sfConfig::get('sf_upload_dir').'/'.myConfig::get('posts_dir', 'posts');
'max_size' => myConfig::get('post_max_icon_size', '10', 'size in KBytes')*1024, //(10*1024=10KB in bytes)
$ symfony doctrine:generate-admin backend Config
class SlugifyClass {
static function Slugify($title) {
$gost = array(
"Є"=>"EH","І"=>"I","і"=>"i","№"=>"#","є"=>"eh",
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
"Е"=>"E","Ё"=>"JO","Ж"=>"ZH",
"З"=>"Z","И"=>"I","Й"=>"JJ","К"=>"K","Л"=>"L",
"М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
"С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"KH",
"Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
"Ы"=>"Y","Ь"=>"","Э"=>"EH","Ю"=>"YU","Я"=>"YA",
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
"е"=>"e","ё"=>"jo","ж"=>"zh",
"з"=>"z","и"=>"i","й"=>"jj","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"kh",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
"ы"=>"y","ь"=>"","э"=>"eh","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"," "=>"-"
);
$iso = array(
"Є"=>"YE","І"=>"I","Ѓ"=>"G","і"=>"i","№"=>"#","є"=>"ye","ѓ"=>"g",
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
"Е"=>"E","Ё"=>"YO","Ж"=>"ZH",
"З"=>"Z","И"=>"I","Й"=>"J","К"=>"K","Л"=>"L",
"М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
"С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"X",
"Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
"Ы"=>"Y","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA",
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
"е"=>"e","ё"=>"yo","ж"=>"zh",
"з"=>"z","и"=>"i","й"=>"j","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"x",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"," "=>"-"
);
$rtl_standard = sfConfig::get('rtl_standard', 'gost') ;
//to lower case
$title = mb_strtolower($title, 'UTF-8');
switch ($rtl_standard) {
case 'off':
return $title;
case 'gost':
$out = trim(strtr($title, $gost), '-');
default:
$out = trim(strtr($title, $iso), '-');
}
// clean slug
$out = preg_replace('/[^a-z0-9\-]+/i', '', $out);
return $out;
}
}
Post:
actAs:
Timestampable: ~
Taggable: ~
Sluggable:
unique: true
fields: [title]
canUpdate: true
builder: [SlugifyClass, Slugify]
Post:
tableName: blog_post
actAs:
Timestampable: ~
Taggable: ~
columns:
id: { type: integer(4), primary: true, autoincrement: true }
title: { type: string(255) }
extract: { type: string(1024) }
content: { type: string(4096) }
is_published: { type: boolean, default: false }
Comment:
tableName: blog_comment
actAs:
Timestampable: ~
columns:
id: { type: integer(4), primary: true, autoincrement: true }
post_id: { type: integer(4), notnull: true }
name: { type: string(100) }
email: { type: string(100) }
content: { type: string(4096) }
subscribe: { type: boolean, default: false }
relations:
Post:
class: Post
local: post_id
foreign: id
foreignAlias: PostComments
type: one
foreignType: many
onDelete: CASCADE
public function executeGetMostCommentedBlogPosts()
{
$q = Doctrine_Query::create()
->select('p.*')
->addSelect('(SELECT count(*) FROM PostComments pc WHERE pc.post_id = p.id) as comments_count')
->from('Post p')
->where('p.is_published', true)
->orderBy('comments_count DESC')
->addOrderBy('d.created_at DESC')
->limit(10);
$this->posts = $q->execute();
}