Продублировать paginate symfony admin generator.

Я постепенно становлюсь стойким фанатом 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

Комментарии (3) на “Продублировать paginate symfony admin generator.”

  1. develop7:

    1. Копируете шаблон админки в проект под другим именем
    2. издеваетесь над ним
    3. указываете имя нового шаблона в generator.yml
    4. ??????
    5. PROFIT!

  2. >>> Править код, который генерит код, рисующий админку – нельзя. При обновлении symfony придётся долго и мучительно сливать все изменения.

    Для этого надо сделать свою тему (за основу взять admin) и положить её в «data/generator/». А за пейджинг отвечает файл _pagination.php. Своя тема — позволяет делать кастимизацию под себя, рекомендую.

Можно чего-нибудь сказануть.