Я постепенно становлюсь стойким фанатом Javascript.
В админке все обьекты выводятся постранично, штук по 20 на страницу. И под списком есть листалка, примерно такая

Во-первых, захотелось, что бы такая же листалка выводилась вверху списка. Во-вторых, что бы были стрелочки «10 страниц назад» и «10 страниц вперед».

Править код, который генерит код, рисующий админку — нельзя. При обновлении symfony придётся долго и мучительно сливать все изменения.
Поправить сгенеренный код — можно, но в админке 31 модуль, т.е. 31 такой список, в каждый из которых нужно будет перекопипастить кусок кода. Плюс, если заменить сгенеренный код своим, то потом он не будет перегенерироваться, если что-нибудь поменяешь в конфиге админки, придётся каждый раз править вручную. Тоже не вариант, вообщем.
На jquery всё это заняло 7 строчек. Времени, как обычно, до черта, больше часа, но 7 строчек — это круто. Впрочем, все и так знают, что jquery жгёт. Но я фанат не jquery, а javascript, который позволяет делать вот такое:
if ( (pagen=page+10) > (p=$(«#lastlink») .attr(«href») .split(‘/page/’))[1] ) pagen=p[1];
Не понадобился else (if (x>z) t=1 else t=z), не понадобились присвоения на отдельных строчках. Но самое жесткое вот:
x > (y=z)[1]
Мы присвоили Y массив Z, потом взяли первый элемент и сравнили с X. Зачем? Затем, что потом нулевой элемент этого массива мы позже тоже используем (иначе б можно было написать x > (y=z[1])).
Впрочем, использовать потом y[0] мне показалось некрасивым, к тому же в коде не только else не нужен, но и if абсолютно лишний и через полчаса код стал вот таким
pagen=Math.min(page+10, ([url,]=$(«#lastlink») .attr(«href») .split(‘/page/’))[1]);
[url,], это примерно [url,p], просто опустили второй параметр, т.к. он нам не понадобится больше. Впрочем, код быстро усложнился обратно, т.к. гугл-хром не понимает конструкцию типа [A,B]=Z. А очень зря. Браузеры по-взрослее (opera, firefox) её понимают. Надеюсь, хром тоже подрастёт.
page=parseInt($(".sf_admin_list .float-right span:first").text());
pagep=Math.max(1,page-10);
pagen=Math.min(page+10, (p=$(".sf_admin_list .float-right a:last").attr("href").split('/page/'))[1]);
url=p[0];
$(".sf_admin_list .float-right a:first").after("<a href=\"" + url +"/page/" + pagep + "\"><img align=\"absmiddle\" src=\"/images/admin/previous10.png\"></a>");
$(".sf_admin_list .float-right a:last").before("<a href=\"" + url +"/page/" + pagen + "\"><img align=\"absmiddle\" src=\"/images/admin/next10.png\"></a>");
$(".sf_admin_list thead:first").prepend($(".sf_admin_list tfoot:first").html() + '<tr><td colspan="9"></td></tr>');
173
1. Копируете шаблон админки в проект под другим именем
2. издеваетесь над ним
3. указываете имя нового шаблона в generator.yml
4. ??????
5. PROFIT!
>>> Править код, который генерит код, рисующий админку – нельзя. При обновлении symfony придётся долго и мучительно сливать все изменения.
Для этого надо сделать свою тему (за основу взять admin) и положить её в «data/generator/». А за пейджинг отвечает файл _pagination.php. Своя тема — позволяет делать кастимизацию под себя, рекомендую.
Спасибо. Обязательно попробую, как только вновь появится подобная задача.