|
SpartakuS ↓
|
 |
|
13 Август, 2010, 02:33:26
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
Итак. Нужен тег генерации пагинатора.
{% page 8 of 43 in 'index.php?page=%page%' %}
Нужно, чтобы он сгенерировала
Paginator::generate(8,43,'index.php?page=%page%');
Сделал так:
class Twig_Paginator_TokenParser extends Twig_TokenParser {
public function getTag() {
return 'page';
}
public function parse(Twig_Token $token) {
$lineno = $token->getLine();
$iCurrent = $this->parser->getStream()->expect(Twig_Token::NUMBER_TYPE)->getValue();
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'of');
$iTotal = $this->parser->getStream()->expect(Twig_Token::NUMBER_TYPE)->getValue();
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'in');
$sLink = $this->parser->getStream()->expect(Twig_Token::STRING_TYPE)->getValue();
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
return new Twig_Paginator_Node($iCurrent, $iTotal, $sLink, $lineno, $this->getTag());
}
}
class Twig_Paginator_Node extends Twig_Node {
protected $iCurrent;
protected $iTotal;
protected $sLink;
public function __construct($iCurrent, $iTotal, $sLink, $lineno, $sTag)
{
parent::__construct();
$this->iCurrent = $iCurrent;
$this->iTotal = $iTotal;
$this->sLink = $sLink;
}
public function compile($compiler)
{
$compiler
->addDebugInfo($this)
->write('Paginator::generate("')
->raw($this->iCurrent)
->raw('", "')
->raw($this->iTotal)
->raw('", "')
->raw($this->sLink)
->raw('")')
->raw(";\n")
;
}
}
именно этот пример работает.
Но если я сделаю к примеру так:
{% page Current of Total in 'index.php?page=%page%' %}
То работать ясен хер не будет. Я не очень вкурил как происходит парсинг. Доку читал. И не смог сдеть так, как надо.
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
Абырвалг ↓
|
 |
|
13 Август, 2010, 10:55:21 , спустя 8 часов 21 минуту 55 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6094 Сила слова: 1.31
|
$iCurrent = $this->parser->getStream()->expect(Twig_Token::NUMBER_TYPE)->getValue();
тут parseExpr или как-то так должно быть Спустя 1 минуту 54 секунды добавил $this->parser->getExpressionParser()->parseExpression()
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
SpartakuS ↓
|
 |
|
13 Август, 2010, 11:22:33 , спустя 27 минут 12 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
Абырвалг,
public function parse(Twig_Token $token) {
$lineno = $token->getLine();
$iCurrent = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'of');
$iTotal = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'in');
$sLink = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
dump($iCurrent);
return new Twig_Paginator_Node($iCurrent, $iTotal, $sLink, $lineno, $this->getTag());
}
ОШибка:
Fatal error: Uncaught exception 'Twig_SyntaxError' with message 'Unexpected token "Twig_Token::BLOCK_END_TYPE" of value "" ("Twig_Token::NAME_TYPE" expected with value "in") in body.tpl at line 4' in /home/socengine.ru/www/core/engines/twig/data/TokenStream.php:127
Я вчера делал. А вот если сделать вот так, то:
public function parse(Twig_Token $token) {
$lineno = $token->getLine();
$iCurrent = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'of');
$iTotal = $this->parser->getExpressionParser()->parseExpression();
//$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'in');
//$sLink = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
dump($iTotal);
return new Twig_Paginator_Node($iCurrent, $iTotal, $sLink, $lineno, $this->getTag());
}
var_dump ($iTotal);
дает
Twig_Node_Expression_Compare Object
(
[nodes:protected] => Array
(
[expr] => Twig_Node_Expression_Name Object
(
[nodes:protected] => Array
(
)
[attributes:protected] => Array
(
[name] => Total
)
[lineno:protected] => 4
[tag:protected] =>
)
[ops] => Twig_Node Object
(
[nodes:protected] => Array
(
[0] => Twig_Node_Expression_Constant Object
(
[nodes:protected] => Array
(
)
[attributes:protected] => Array
(
[value] => in
)
[lineno:protected] => 4
[tag:protected] =>
)
[1] => Twig_Node_Expression_Constant Object
(
[nodes:protected] => Array
(
)
[attributes:protected] => Array
(
[value] => /%page%
)
[lineno:protected] => 4
[tag:protected] =>
)
)
[attributes:protected] => Array
(
)
[lineno:protected] => 0
[tag:protected] =>
)
)
[attributes:protected] => Array
(
)
[lineno:protected] => 4
[tag:protected] =>
)
с утра проснулся. Может на свежую голову че вкурю.
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
phpdude ↓
|
 |
|
13 Август, 2010, 01:28:45 , спустя 2 часа 6 минут 12 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: 20789 Сила слова: 1.65
|
ну и гавно ваш твиг реальни
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
SpartakuS ↓
|
 |
|
14 Август, 2010, 12:34:49 , спустя 11 часов 6 минут 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
ап блеять
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
Абырвалг ↓
|
 |
|
14 Август, 2010, 12:37:01 , спустя 2 минуты 12 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6094 Сила слова: 1.31
|
блин, ну посмотри как уже готовые теги сделаны. Я ща не могу сесть и писать теги тебе, я в дорогу собираюсь уже :P
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
SpartakuS ↓
|
 |
|
14 Август, 2010, 01:24:18 , спустя 47 минут 17 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
Абырвалг, да посмотрел, пересмотрел. Я уже все че можно. Блять, ну почему можно написать такой ахуенный шблонизатор и не описать подробно механизм парсинга. Да и не прошу я тя писать. Я думаю мож еще кто че знает))
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
Абырвалг ↓
|
 |
|
14 Август, 2010, 09:51:59 , спустя 8 часов 27 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6094 Сила слова: 1.31
|
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
SpartakuS ↓
|
 |
|
14 Август, 2010, 10:13:55 , спустя 21 минуту 56 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
да
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
SpartakuS ↓
|
 |
|
15 Август, 2010, 01:31:46 , спустя 15 часов 17 минут 51 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
В опщем подумал я, подумал. И решил сделать через жопу.
class Twig_Paginator_TokenParser extends Twig_TokenParser {
public function getTag() {
return 'page';
}
public function parse(Twig_Token $token) {
$lineno = $token->getLine();
$oStream = $this->parser->getStream();
if ($oStream->test(Twig_Token::NUMBER_TYPE)) {
$iCurrent['num'] = $oStream->expect(Twig_Token::NUMBER_TYPE)->getValue();
} else {
$iCurrent['name'] = $oStream->expect(Twig_Token::NAME_TYPE)->getValue();
}
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'of');
if ($oStream->test(Twig_Token::NUMBER_TYPE)) {
$iTotal['num'] = $oStream->expect(Twig_Token::NUMBER_TYPE)->getValue();
} else {
$iTotal['name'] = $oStream->expect(Twig_Token::NAME_TYPE)->getValue();
}
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, 'in');
if ($oStream->test(Twig_Token::STRING_TYPE)) {
$sLink['str'] = $oStream->expect(Twig_Token::STRING_TYPE)->getValue();
} else {
$sLink['name'] = $oStream->expect(Twig_Token::NAME_TYPE)->getValue();
}
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
return new Twig_Paginator_Node($iCurrent, $iTotal, $sLink, $lineno, $this->getTag());
}
}
class Twig_Paginator_Node extends Twig_Node {
protected $iCurrent;
protected $iTotal;
protected $sLink;
public function __construct ($iCurrent, $iTotal, $sLink, $lineno, $sTag)
{
parent::__construct ();
$this-> iCurrent = $iCurrent;
$this-> iTotal = $iTotal;
$this-> sLink = $sLink;
}
public function compile ($compiler)
{
$sCode = 'Paginator::generate(';
$sCode .= (isset($this-> iCurrent['num'])) ? '"' . $this-> iCurrent['num'] . '"' : '$context["' . $this-> iCurrent['name'] . '"]';
$sCode .= ', ';
$sCode .= (isset($this-> iTotal['num'])) ? '"' . $this-> iTotal['num'] . '"' : '$context["' . $this-> iTotal['name'] . '"]';
$sCode .= ', ';
$sCode .= (isset($this-> sLink['str'])) ? '"' . $this-> sLink['str'] . '"' : '$context["' . $this-> sLink['name'] . '"]';
$sCode .= ");\n";
$compiler
-> addDebugInfo($this)
-> write($sCode)
;
}
}
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
fabpot ↓
|
 |
|
15 Август, 2010, 01:36:40 , спустя 4 минуты 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 2
Сообщений: 6 Сила слова: 33.33
|
бугагашенька
|
|
|
|
|
Записан
|
|
|
|
|
SpartakuS ↓
|
 |
|
15 Август, 2010, 01:44:09 , спустя 7 минут 29 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
fabpot, будь мужиком, блеять. Опиши в документации, как делать не через жопу такие теги. Спустя 1 минуту добавил 
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
shuranov ↓
|
 |
|
18 Август, 2010, 04:28:24 , спустя 3 дня 14 часов 44 минуты 15 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 7
Сообщений: 112 Сила слова: 6.25
|
fabpot, будь мужиком, блеять. Опиши в документации, как делать не через жопу такие теги. Спустя 1 минуту добавил 
Вот блин, тут ты с Фабьеном нормально общаешься, а вчера в аське его "тупым быдлокодером, который не умеет писать документацию" назвал. Ой, кажется я не туда пишу...
|
|
|
|
|
Записан
|
|
|
|
|
SpartakuS ↓
|
 |
|
18 Август, 2010, 04:31:13 , спустя 2 минуты 49 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 32
Сообщений: 2444 Сила слова: 1.31
|
shuranov, :D Не пизди
|
|
|
|
|
Записан
|
 цска ебаное гавно.
|
|
|
|
Sinkler ↓
|
 |
|
18 Август, 2010, 04:38:26 , спустя 7 минут 13 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Похуй, пляшем!
Группа: Джедаи Карма: 73
Сообщений: 6804 Сила слова: 1.07
|
бля, я ж вроде отписывался от всех тем с фабьеном
|
|
|
|
|
Записан
|
|
|
|
|