Update (13.10.2014)
Ну, вот если бы вы хоть указали, что из выше мной написанного вам не понятно, получается все?
Как средствами Ajax отправить данные, помните? (Откройте ваш фидл). Добавьте такой же запрос в начале функции генерации календаря переменные year, month у вас есть (их принимает функция), uid сами подумайте, откуда взять.
Запрос отправлен, теперь обработчик ищет даты, соответствующие этим трем критериям (год, месяц, пользователь). Пример запроса смотрите в моем ответе здесь. Результат выборки нам необходимо передать обратно в скрипт генерации календаря, для этого просто выведем массив (используя echo, или print, или даже print_f) в удобном для JavaScript формате. Почитайте в Интернете, как передавать переменные/массивы/данные из php в JavaScript, json как подсказка.
Ну что, теперь у функции create calendar появились еще данные. Достаточно обработать их (надеюсь, вы уже нашли, как) и воспользоваться функцией inarray для сравнения, примерно так:
Заменили
table += '<td>'+d.getDate()+'</td>';
на
if (
$.inArray( d.getDate(), your_array )) {table += '<td class="click">'+d.getDate()'</td>';}
Else {table += '<td>'+d.getDate()+'</td>';}
Повторения кода можно (нужно) исключить, но так, я думаю, будет нагляднее.
--------------------------
UPDATE:
--------------------------
Изначально хотел бы обратить внимание на то что я ошибся в синтаксисе функции SUBSTRING
, третий параметр в ней - это длина извлекаемой строки а не позиция последнего символа (как я изначально понял), соответственно запрос выбора отдельных сегментов нужно поправить, как это делается я показал в sqlfiddle
Касаемо вашего обработчика: теги в нем не нужны, просто выводите echo $json;
Я не понял почему вы выбираете только по месяцу, а год упускаете, впрочем, возможно ваши задачи это позволяют.
Исходя из моей ошибки касаемо SUBSTRING
, запрос в обработчике должен выглядеть как то так: $sql_query = "SELECT SUBSTRING(vihodnoy, 9, 2) as day FROM table WHERE user_id={$uid} AND SUBSTRING(vihodnoy, 6, 2) = {$month} AND SUBSTRING(date, 1, 4) = {$year}";
Насчет inArray
, а где определяется date_json
у вас? Ну проверку вижу, а вот задание значений для него?
Нужно же было обработать ответ обработчика:
var date_json;
$.ajax({
type: "POST",
url: your_url,
data: "month="+month + "&year="+year,
success: function(data) {
date_json = JSON.parse(data);
}
});
Обратите внимание на функцию success
, в ее теле мы получаем и преобразуем json-строку в массив.
Старайтесь более вникать в решения в коде, у вас образуется большая каша, и очень много ошибок именно потому что вы не глядя вставляете куски чужого кода. К тому же куски кода (не важно мои или других участников) не проверяются в реальных условиях, максимум на локальных машинах или же на спец.сервисах, но отнюдь не в вашем проекте, поэтому работоспособность оного необходимо проверять и подстраивать под свои нужды в любом случае!