Для школьного проекта нам нужно создать веб-приложение. Я буду создавать что-то, где люди смогут отслеживать свои занятия, их домашнюю работу и свободное время. Планировщик / календарь. (Я заставляю его звучать очень хреново здесь, но эй, я устал и английский не мой первый язык;))
Я буду работать в CodeIgniter для логики PHP, в сочетании с обычным .. CSS, jQuery, mySQL. PHP необходим для курса; Я решил сделать это в CI, потому что хорошо .. Я хотел изучить структуру. Мы вроде как должны показать, что мы можем сделать в этот момент нашей «школьной карьеры».
Во всяком случае, я хотел бы попросить кое-какие идеи относительно функции, которую я хочу реализовать. В верхней части моей страницы я хотел бы показать панель, содержащую дни месяца. Под номером дня я бы показал, сколько задач добавлено в этот день с помощью некоторых точек. Когда пользователь нажимает предыдущий или следующий, я хочу показать дни предыдущего / следующего месяца. Я также хочу, чтобы какой-то слайдер находился под этим полем, который пользователь может использовать для скольжения влево и вправо, и цикл через эти дни. Надеюсь, это имело смысл?
EDIT 2: Я хочу, чтобы ползунок был динамичным . Если пользователь переходит в предыдущий или следующий месяцы или нажимает кнопки, я хочу, чтобы он загружал дни предыдущего / следующего месяца и показывал их. Кроме того, скажем, что мы на 26-м месяце, слайдер должен будет показать что-то вроде 10-31 месяца и 1-10 следующего месяца. Полагаю, мне также придется изменить показатель месяца (не так, как на изображении здесь), поэтому пользователь знает, когда начнется другой месяц (я покажу им название месяца).
Вот фотография (не помните, что число дней перепуталось, я ленился делать это правильно в Photoshop, исправил томо):
Я смотрю на слайдеры jQuery UI. Я полагаю, мне нужно было бы захватить количество дней из базы данных или с помощью PHP? Я думаю, функция cal_days_in_month может пригодиться здесь. Когда пользователь нажимает на стрелки или слайды влево или вправо, я не хочу, чтобы страница обновлялась. Должен ли я пойти с аякс-звонками? Честно говоря, я не совсем уверен, как реализовать это. Цифры также являются ссылками на вид календаря, который отображается под этой панелью. Могу ли я использовать класс CI Calendar для этого? Или это больше подходит для полноценных календарей календаря Google? Я думал, что этот скринкаст может быть полезен?
Если возможно, может кто-то, пожалуйста, дать представление о том, как начать работать над этим и какие плагины / etc я мог бы использовать? Честно говоря, я не знаю, с чего начать. Я уверен, что смогу это сделать, но я думаю, было бы неплохо получить кикстарт с помощью какой-то помощи здесь. Основная проблема, которую я вижу, – это слайдер / следующая / предыдущая вещь и загрузка в дни предыдущего / следующего месяца.
Заранее спасибо.
EDIT: Я понимаю, что некоторые люди могут сказать / подумать «OMG, почему бы вам просто не использовать навыки, которые у вас есть, вместо того, чтобы пытаться просить о нас?». Ну, это потому, что я действительно хочу что-то узнать во время этого проекта. Имейте в виду, я здесь не прошу ввести код кода, я просто прошу прояснить, с чего начать и какие вещи использовать; возможно, небольшие фрагменты, которые могут помочь мне. Благодарю.
ОБНОВИТЬ:
У меня очень простой «дневной бар». Все еще без слайдера, и не работают предыдущие и следующие кнопки, но эй … по крайней мере, он заполняет его динамически. Он показывает 5 дней до текущего дня, затем в этом месяце до конца. Все, что осталось заполнить, заполняется днями следующего месяца. Довольно простой. Однако у меня есть пара вопросов!
Так как вчера кто-то сказал мне, что я нарушал шаблоны дизайна, делая некоторые вещи так, как я это делал, я очень параноик по поводу того, как я работаю сейчас, и мне действительно понравилась бы некоторая обратная связь от «CodeIgniter pro». Чтобы заполнить «дневную панель», я создал помощника с несколькими методами. (Один из методов динамического заполнения этого «месячного года», который вы видите на картинке, другой метод init (), который загружает список дней, как я уже объяснял ранее). Я загрузил этот помощник в контроллер, и теперь я использую методы на мой взгляд:
<ul> <?php init($current_day_of_month, $current_month, $current_year, $days_in_current_month, $show_history); ?> </ul>
Затем помощник перекликается с моими дневными значениями. Это хорошая или плохая практика? Я продолжал думать не так, когда хотел начать писать код для этого. Я хотел иметь функцию где-то в своем контроллере, а затем вызывать ее из представления, но я читал, что я не должен так делать. что мне пришлось отменить свою логику. Мне трудно обернуть голову тем фактом, что я должен сделать это, отправив массивы данных на мой взгляд (из моего контроллера), поэтому я решил создать помощника. Хорошо? Плохо? Любые советы, ресурсы, которые я должен прочитать, скринкасты, которые я должен посмотреть? Огромное спасибо.
Главное, если вы хотите, чтобы ваша система была динамичной, заключается в том, чтобы сделать передачу данных коротким. Таким образом, используя Ajax, как говорит icchanobot, отправьте запрос на определенный месяц. Используйте get:
'some_controller?m=' + month + '&y=' + year
или даже:
'some_controller?next' // or previous
Контроллер должен получать данные за правильный месяц, но не отправлять обратно весь месяц – только данные, необходимые для вашего дисплея, в формате, насколько это возможно. Вы можете запросить, сколько событий выполняется в какие дни этого месяца:
SELECT day, count (event) FROM event_table WHERE DATE BETWEEN 'yyyy-mm-01' AND 'yyyy-mm-31' GROUP BY day ORDER BY day;
запрос нуждается в адаптации к вашей структуре данных – используйте функцию для получения дня с полной даты и, возможно, используйте индексы, чтобы запрос быстро возвращал данные.
Затем контроллер возвращает строку как можно короче, из соответствующих данных, отсортированных в дневном порядке:
1 = 3,15 = 1,29 = 2
Это означало бы «1-й = 3 события, 15-е = 1 событие, 29 = 2 события». Если вам не нужно количество событий, то «1,15,2» достаточно. Пустые дни не передаются.
данные получаются обработчиком событий ajax на вашей веб-странице, и вы анализируете его с помощью split, а затем заполняете ползунок с помощью цикла.
Ваше самое большое перетаскивание в очень динамичном приложении – это если оно замедляется, когда вы повторно запрашиваете следующий месяц и следующий. Несколько трюков:
Удачи!
Мне это кажется довольно прямым. У меня нет времени писать все это сейчас. но вот какие шаги я предприму.
1) создать модель, которая получает все задачи в течение месяца и использует ее для создания массива {date}=>{num_tasks}
например {'1'=>3,'2'=>1, "3"=>0, ...}
. // hint: используйте обычный счетчик SQL или просто зацикливайте и суммируйте их.
2) создайте функцию контроллера, чтобы вернуть этот массив как JSON. Что-то вроде этого:
public function get_month($month, $year) { $tasks = $this->task_model->get_each_days_taskcount($month, $year); $json = json_encode ($tasks); echo $json; }
3) напишите html-страницу с функцией javascript для вызова этой функции контроллера с помощью AJAX. Что-то вроде:
function fill_calendar(month, year) { $.get('some_controller/get_month/' + month + '/' + year, function(data) { // parse the JSON then // do something with the data here like $('#calendar').append(); }); }
4) Загрузите в этом месяце что-то вроде этого:
$(function() { var d = new Date(); var tmonth = d.getMonth(); var tyear = d.getFullYear(); fill_calendar(tmonth, tyear); // populate with this month });
5) сделайте предыдущие и следующие кнопки работать с чем-то вроде
$('#prev_button').click(function() { fill_calendar(current_month - 1 , tyear); // you will probly need to make this calculation smarter than just minus 1 });
Я действительно не вижу осложнений по этому поводу …….
Если вы просто используете jQuery UI DataPicker и изменяете файл js, чтобы он сохранял дни в слайдере, тогда помещайте данные в слайдер jQuery UI, и у вас должно быть почти то, что вам нужно.