PHP или JS Templateing engine? (за множество блокове от един и същ html)

Основните въпроси са с удебелен шрифт в долната част, но ще ви разкажа какво и защо питам.

По принцип вземам това, което сега правя за потребителите един по един, и се опитвам да им дам възможност да показват всичко на една страница. Използвах PHP за поставяне на данни в html, но се интересувах да подобря кода си и се чудех дали handlebars.js с javascript ще има повече смисъл, дори само за моя здрав разум.

Да кажем, че потребител има списък с квадратчета за отметка до всеки

[x] Option 1
[ ] Option 2
[ ] Option 3
...
[x] Option 20

За всяко отметнато поле се показва блок от html с информация от базата данни.

В момента показвам само един блок html на страница. PHP беше на същата страница, грабвайки данните и преминавайки през 2-та масива, генерирани от две заявки, с вграден php вътре в html, за да генерира текущите блокове от html.

....
<div class="option-wrapper">
    <?php foreach ( $option_list as $option ) : ?>
....

С необходимостта да можете да генерирате същия блок код между 1 и 20 пъти на една и съща страница. Предполагам, че все още мога да използвам вграден php и да превъртя целия блок от html, за да създам друг блок от html за всяка избрана опция.

|    Option 1      |  |    Option 20     |
|  Title: Test1    |  |  Title: Test2    |

Но се чудех дали има предимство от използването на машина за шаблони на javascript за тази цел. Имам javascript, написан за диаграмни данни, в момента имам скрити html елементи, които съхраняват php променливите (15 от тях от два масива), които след това се изтеглят от моя jQuery. Но вече чувствам, че скриването на променливи в html поне се чувства като лоша практика.

<div id="total-users" style="display:none;"><?php echo $total_users ?></div>
....
var totalUsers = $('#total-users').html();

Това може да е един от тези, ако трябва да попитате, вероятно е въпрос от типа на лоша практика. Но, честно казано, това лоша практика ли е?

В интерес на писането на код с по-високо качество, по-добре ли е това да се направи с помощта на json_encode, след като php грабне всички данни. След това да използвате машина за шаблони на javascript като handlebars.js с блок от html, който е клониран за всяка избрана опция?

Още нещо, може би в бъдеще искам да мога да превключвам данните, които се показват в движение, като използвам падащо меню във всеки блок, това променя ли кой маршрут има повече смисъл?

Има ли нещо друго очевидно, което пропускам или правя погрешно?

Благодаря ти!


person mstef    schedule 31.07.2012    source източник


Отговори (2)


Бих абсолютно препоръчал използването на шаблон за данните.

1- Когато потребителят избере опция (или изпрати своите окончателни избори от всички налични опции), направете AJAX извикване, за да извлечете JSON обект (можете да върнете един обект или всички данни за опции в едно JSON извикване, последното е за предпочитане).

2- Използвайте шаблона (ръкохватки, мустаци, долна черта и т.н.), за да изобразите данните във функция за успешно обратно извикване.

Това ще направи вашия код по-ефективен и по-гъвкав за бъдещи UI заявки (вашият код ще поддържа много различни реализации от гледна точка на потребителското изживяване).

person Joe Johnson    schedule 31.07.2012

Ако ви разбирам правилно, информацията, която извличате от базата данни, е статична (т.е. не се променя между всяко щракване в квадратчето).

Ако горното е вярно, аз лично бих го направил така. (все пак само мое мнение)

Бих грабнал цялата информация от базата данни (позовавайки се на всички "квадрати за отметка") само веднъж, от страната на сървъра (PHP). След това бих ги поставил в скрити divs:

<div id="stuffFromDb1" class="hidden" style="display: none">blablabla</div>

След това, когато потребителят щракне в квадратче за отметка, ще покажа съответния div, като променям display: none на display: block. (с jQuery е още по-лесно, вижте Toggle.

Това ми се струва най-ефективният начин вместо грабване на информация чрез AJAX или множество "форми".

РЕДАКТИРАНЕ:

Предпочитам този метод пред AJAX и публикуване на формуляр, защото намалява броя на заявките към сървъра. Освен ако заявките в базата данни не са много интензивни (сложни), обикновено е по-бързо да се направи заявка в базата данни веднъж, отколкото няколко пъти, което дава на потребителя по-добро изживяване.

Редактиране 2:

Трудно е да ви дам отговор, без да виждам кода, но за 100 или 200 или дори 1000, бих се обзаложил, че като цяло ще бъде по-бързо да ги заредите всички наведнъж, отколкото да ги заредите 1 по 1, особено ако можете да постигнете това, като направите само 1 заявка към базата данни.

Системата за шаблони от страна на клиента винаги разчита на скоростта на клиента. В по-нови браузъри / нови персонални компютри JS двигателят е сравнително бърз, но за по-стари компютърни системи / по-стари браузъри това изобщо не е вярно. Сложните DOM манипулации + времето, необходимо за изпълнение на AJAX заявката, може да отнеме доста време, време, през което потребителят може да не може да взаимодейства със страницата. Освен това може да възникнат други проблеми (състезателното състояние на AJAX изскача в съзнанието ми).

person Tivie    schedule 31.07.2012
comment
Изтеглената информация е статична тук, актуализирана е другаде, но това е по-скоро като отчет или обобщение на данни. Това определено е прост метод за постигане на това. Но все пак ще бъде ли ефективно, ако броят се изстреля. Има някои допълнителни javascript, които се изпълняват за всеки, показвайки диаграма. Бих могъл да стартирам това винаги, когато настроя конкретни блокове да бъдат видими. Но ако вместо 20 блока има 100 или 200, това ще промени ли мнението ви доколкото е ефективно? Просто съм любопитен. Заявките не са сложни, но тази функция не е фиксирана в камък, така че се опитваме да я направим гъвкава. - person mstef; 31.07.2012