@_ne_scaju_, я вам показл пример, на всякий случай, чтобы избежать дополнительных вопрос, типа "что такое data-атрибут" или "как установить обработчик события", или же "всё сделал, но обработчик события не срабатывает" Смотрите не минимизированный код плагина, ищите цикл, где формируется html списка задач и добавляйте туда кнопку
В принципе я нашел где формируется эти задачи, но кнопочку добавить не знаю как: Спойлер: Добавляю кнопку в плагин Код (Javascript): // вывод информации генерируемой на странице function dateSlider(show, flags, eventsOpts) { var $eventsCalendarSlider = $("<div class='eventCalendar-slider'></div>"); var $eventsCalendarMonthWrap = $("<div class='eventCalendar-monthWrap'></div>"); var $eventsCalendarTitle = $("<div class='eventCalendar-currentTitle'><a href='#' class='eventCalendar-monthTitle'></a></div>"); var $eventsCalendarArrows = $("<a href='#' class='eventCalendar-arrow eventCalendar-prev'><span>" + eventsOpts.locales.txt_prev + "</span></a><a href='#' class='eventCalendar-arrow eventCalendar-next'><span>" + eventsOpts.locales.txt_next + "</span></a>"); var $eventsCalendarDaysList = $("<ul class='eventCalendar-daysList'></ul>"), //пробую вот так добавить кнопку, но она не появляется) var $eventsCalendarDelete = $("<div class='eventCalendar-delete'><button>x</button></div>"), date = new Date(); if ( !flags.wrap.find('.eventCalendar-slider').length ) { flags.wrap.prepend($eventsCalendarSlider); $eventsCalendarSlider.append($eventsCalendarMonthWrap); } else { flags.wrap.find('.eventCalendar-slider').append($eventsCalendarMonthWrap); } flags.wrap.find('.eventCalendar-monthWrap.eventCalendar-currentMonth').removeClass('eventCalendar-currentMonth').addClass('eventCalendar-oldMonth'); $eventsCalendarMonthWrap.addClass('eventCalendar-currentMonth').append($eventsCalendarTitle, $eventsCalendarDaysList); // if current show current month & day if (show === "current") { day = date.getDate(); $eventsCalendarSlider.append($eventsCalendarArrows); } else { date = new Date(flags.wrap.attr('data-current-year'),flags.wrap.attr('data-current-month'),1,0,0,0); // current visible month day = 0; // not show current day in days list moveOfMonth = 1; if (show === "prev") { moveOfMonth = -1; } date.setMonth( date.getMonth() + moveOfMonth ); var tmpDate = new Date(); if (date.getMonth() === tmpDate.getMonth()) { day = tmpDate.getDate(); } } // get date portions var year = date.getFullYear(), // year of the events currentYear = new Date().getFullYear(), // current year month = date.getMonth(), // 0-11 monthToShow = month + 1; if (show != "current") { // month change getEvents(flags, eventsOpts, eventsOpts.eventsLimit, year, month,false, show); } flags.wrap.attr('data-current-month',month) .attr('data-current-year',year); // add current date info moment.locale(eventsOpts.locales.locale); var formatedDate = moment(year+" "+monthToShow, "YYYY MM").format("MMMM YYYY"); $eventsCalendarTitle.find('.eventCalendar-monthTitle').html(formatedDate); // print all month days var daysOnTheMonth = 32 - new Date(year, month, 32).getDate(); var daysList = [], i; if (eventsOpts.showDayAsWeeks) { $eventsCalendarDaysList.addClass('eventCalendar-showAsWeek'); // show day name in top of calendar if (eventsOpts.showDayNameInCalendar) { $eventsCalendarDaysList.addClass('eventCalendar-showDayNames'); i = 0; // if week start on monday if (eventsOpts.startWeekOnMonday) { i = 1; } for (; i < 7; i++) { daysList.push('<li class="eventCalendar-day-header">'+moment()._locale._weekdaysShort[i]+'</li>'); if (i === 6 && eventsOpts.startWeekOnMonday) { // print sunday header daysList.push('<li class="eventCalendar-day-header">'+moment()._locale._weekdaysShort[0]+'</li>'); } } } dt=new Date(year, month, 01); var weekDay = dt.getDay(); // day of the week where month starts if (eventsOpts.startWeekOnMonday) { weekDay = dt.getDay() - 1; } if (weekDay < 0) { weekDay = 6; } // if -1 is because day starts on sunday(0) and week starts on monday for (i = weekDay; i > 0; i--) { daysList.push('<li class="eventCalendar-day eventCalendar-empty"></li>'); } }
Не нашли. Проинспектируйте код списка, посмотрите какие классы у элементов. По этим классам можно будет найти в JS то, что нужно.
Я так и не нашел) может быть этот кусок ? Спойлер: Кусок кода PHP: // каждый eventCalendar выполнит эту функцию that.each(function(){ flags.wrap = $(this); flags.wrap.addClass('eventCalendar-wrap').append("<div class='eventCalendar-list-wrap'><p class='eventCalendar-subtitle'></p><span class='eventCalendar-loading'>"+eventsOpts.locales.txt_loading+"</span><div class='eventCalendar-list-content'><ul class='eventCalendar-list'></ul></div></div>"); if (eventsOpts.eventsScrollable) { flags.wrap.find('.eventCalendar-list-content').addClass('scrollable'); } setCalendarWidth(flags); $(window).resize(function(){ setCalendarWidth(flags); }); //flags.directionLeftMove = flags.wrap.width(); // show current month dateSlider("current", flags, eventsOpts); getEvents(flags, eventsOpts, eventsOpts.eventsLimit,false,false,false,false); changeMonth(flags, eventsOpts); flags.wrap.on('click','.eventCalendar-day a',function(e){ //flags.wrap.find('.eventCalendar-day a').live('click',function(e){ e.preventDefault(); var year = flags.wrap.attr('data-current-year'), month = flags.wrap.attr('data-current-month'), day = $(this).parent().attr('rel'); getEvents(flags, eventsOpts, false, year, month,day, "day"); }); flags.wrap.on('click','.eventCalendar-monthTitle', function(e){ //flags.wrap.find('.eventCalendar-monthTitle').live('click',function(e){ e.preventDefault(); var year = flags.wrap.attr('data-current-year'), month = flags.wrap.attr('data-current-month'); getEvents(flags, eventsOpts, eventsOpts.eventsLimit, year, month,false, "month"); }); });
Не может. Если вы смотрели код сообщений, то кроме всего прочего, увидели бы, что у элемента <ul> есть класс "eventCalendar-list", но есть зацепка, которая предельно упрощает поиск - не очень часто встречающийся тег <time>. Открываем файлик, Ctrl+F, вводим <time и вот оно на 424-ой строке.
Попробовал очистить форму после отправки, но не тут то было, хотел чтобы форма сбросилась, это получилось, но когда выбрал опять предмет, и отправил форму, то у меня загрузились те же события короче друг под другом стали, как и было, дублировались) В какую сторону копать чтобы дойти до верного пути? PHP: $('.my_class').on('submit', function(e){ e.preventDefault(); $.ajax({ url: '/functions.php', type: 'POST', dataType: 'json', data: $(this).serialize(), success: function(data){ $("form")[0].reset(); initCalendar(data); //вот такая запись нормальная для подгрузки плагина? }, error: function(xhr, ajaxOptions, thrownError){ console.log(thrownError + '; ' + xhr.statusText + '; ' + xhr.responseText); } }); });
Ваша форма никак не влияет на поведение плагина. Ошибка. Дело совсем не в этом. Во-первых, лично у меня сейчас очень мало свободного времени. А во-вторых, всё, что мы тут пытаемся разбирать, по сути вылетает в трубу, т.к. чужой опыт хорошо прилипает к уже имеющимся знаниям, но практически мгновенно исчезает, если базовые знания практически равняются нулю. Попробуйте найти в плагине переменную или это может быть свойство объекта, куда записываются данные (JSON-строка). Дальше нужно будет подумать, как очищать эти закешированные данные при каждой инициализации плагина.
@Deonis Хорошо попробую найти свойство или переменную, как можно это делать тестировать, например в php var_dump(), printf_r() а в js как? --- Добавлено --- как прилипает, начинаешь кодить как этот программист до тебя, а потом быстро забываешь или как?
console и самое базовое - console.log(); Если есть хороший фундамент, то на нём можно строить дом, а если фундамента нет и ты начинаешь без него выкладывать кирпичики, то такой дом обречён. Изучите хотя бы основы JS и я вас уверяю, что многие вопросы просто отпадут, а помогать вам будет гораздо проще. Да и вам будет проще улавливать суть возникающих проблем и пояснения тех, у кого опыт немного больше вашего.
Достойный ответ) Я когда-то начинал изучать js около 20 уроков прошел азы имею введу если честно уже все забыл не практиковал тупо перепробовал что проходил и все.
Да именно на этом сайте учил основы js! Начал смотреть на код, и что-то мне на глаза попался вот такой код: Спойлер: Ищу код принимающий json Код (Javascript): function getEvents(flags, eventsOpts, limit, year, month, day, direction) { limit = limit || 0; year = year || ''; day = day || ''; // Чтобы избежать проблемы с январем (месяц = 0) if (typeof month != 'undefined') { month = month; } else { month = ''; } //var month = month || ''; flags.wrap.find('.eventCalendar-loading').fadeIn(); if (eventsOpts.jsonData) { // пользователь отправляет json в параметрах плагина eventsOpts.cacheJson = true; flags.eventsJson = eventsOpts.jsonData; getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction); } else if (!eventsOpts.cacheJson || !direction) { // первая загрузка: загрузка json и сохранение его в будущих фильтрах $.getJSON(eventsOpts.eventsjson + "?limit="+limit+"&year="+year+"&month="+month+"&day="+day, function(data) { flags.eventsJson = data; // сохранение данных в будущих фильтрах getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction); }).error(function() { showError("error getting json: ", flags.wrap); }); } else { // фильтр previus сохранен json getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction); } if (day > '') { flags.wrap.find('.eventCalendar-current').removeClass('eventCalendar-current'); flags.wrap.find('#dayList_'+day).addClass('eventCalendar-current'); } } Это то что мне нужно было найти, плюс был коммент который перевел, ура)
@Deonis Привет, делаю обновления и удаления записи, уже сделал запросы проверил все срабатывает, id урока подставляю в get параметр в юрл адрес, потом передаю в функцию ну и все. Но тут такая штука, если пользователь поменяет в юрл id записи которую он редактирует или удаляет то запись удалится или от редактируется. Каким способом лучше проверить пользователя что именно он писатель и ему разрешено изменять или удалять эту запись? Как проверить $_GET['id']? Посоветуй пожалуйста.
Приветствую. Сообщений не было более 12-ти часов, я уже начал переживать Если память не изменяет, то у вас в сессии есть ID юзера. Вот и подставляйте в запрос соответствующее условие: WHERE `ID_записи` = 100500 AND `ID_юзера` = $_SESSION['ID_юзера'];
Я так и делаю если честно, согласно условию мне пишет запись изменена, или удалена, но на самом деле не чего не удалилось и не изменилось, хочу вывести правильно сообщение, например, вы изменили запрос в юрл изменение невозможно или удаление.
@Deonis Не получается, запись то как надо не удаляется, но блин сообщение об удачном удалении выводится, а надо чтобы ошибку вывел, потому что url адрес изменился) --- Добавлено --- @Deonis Ок давай покажу: Спойлер: функция удаления записи PHP: function Del($getid, $sessionUid) { # глобальная переменная подключения global $pdo; $del = $pdo->prepare('DELETE FROM `predmet_info` WHERE `id` = ? AND `uid` = ?'); $del->execute([$getid, $sessionUid]); } С ней все понятно она только выполняет запрос удаления. Спойлер: файл обработки удаления PHP: <?php if (session_status() == PHP_SESSION_NONE) { session_start(); } if(!isset($_SESSION['uid'])) { header('Location: /'); exit(); } include($_SERVER['DOCUMENT_ROOT']."/config/db.php"); include($_SERVER['DOCUMENT_ROOT']."/events/ins_del_upd.php"); # подключаем функции для работы с данными if(isset($_GET['id'])) { $getID = $_GET['id']; if ($_SERVER['REQUEST_METHOD'] == 'POST') { if(isset($_SESSION['uid'])) { # сохраняем сессию в переменную $uid = $_SESSION['uid']; # delete the records $del = Del($getID, $uid); $_SESSION['success'] = 'Заметка успешно удалена'; header('Location: /events/UserEvents.php'); exit; } } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Удалить заметку</title> <link rel="stylesheet" href="/css/style.css"> <link rel="stylesheet" href="/css/bootstrap.min.css"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css"> <script src="/js/jquery.min.js"></script> </head> <body> <div class="delzapic"> <?php if (isset($_SESSION['errors'])) { echo '<div class="alert alert-danger" role="alert">' .$_SESSION['errors'].'</div>'; unset($_SESSION['errors']); } ?> <div class="alert alert-warning" role="alert"><p>Вы действительно хотите удалить эту запись?</p></div> <form action="" method="post"> <input type="text" value="<?php echo $getID; ?>"> <input type="submit" name="submit" value="Удалить" /> </form> </div> </body> </html> Ну вот и сам файл который по сути должен проверить нажатия кнопки удалить и обратится к функции удаления. Где у меня не правильно условие стоит?
Условий больше, чем нужно. Для начала, проверить данные, которые участвуют в запросе. Т.к. у вас всё в одном файле, то обычного вывода будет достаточно. Ошибка в сессии - это всё равно, что шинель в трусы заправлять. Чем обычные переменные не устроили или, раз уж у вас там какая-то переадресация, то почему бы не добавлять какой-то параметр? Но даже если сессии, то где вы хоть что-то присваиваете $_SESSION['errors']? Результат должна возвращать функция Del (например, true/false). Смотрим, что возвращает метод execute()
@Deonis Более менее разобрался, только вопрос зачем возвращать выполненный запрос del()? Вопрос меня все же интересует до сих пор вопрос, как же очистить можно поля вывода в календаре чтобы фильтры очистились, помоги пожалуйста)
Не выполненный запрос, а результат его выполнения или какой-то "маркер", который бы говорил о том, что запрос выполнен успешно или нет. По поводу "очистки" и прочего, что требует разбор кода плагина и его дополнение/изменение, я уже говорил - у меня сейчас нет на это времени.
Хорошо спасибо) Я к стати показывал код который выводит генерируемую json строку в js. Посмотри на быструю руку, может подскажешь как же очистить вот функция: Код (Javascript): // функция для работы с json данными она принимает и сохраняет его в фильтрах function getEvents(flags, eventsOpts, limit, year, month, day, direction) { limit = limit || 0; year = year || ''; day = day || ''; // Чтобы избежать проблемы с январем (месяц = 0) if (typeof month != 'undefined') { month = month; } else { month = ''; } //var month = month || ''; flags.wrap.find('.eventCalendar-loading').fadeIn(); if (eventsOpts.jsonData) { // пользователь отправляет json в параметрах плагина eventsOpts.cacheJson = true; flags.eventsJson = eventsOpts.jsonData; getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction); } else if (!eventsOpts.cacheJson || !direction) { // первая загрузка: загрузка json и сохранение его в будущих фильтрах $.getJSON(eventsOpts.eventsjson + "?limit="+limit+"&year="+year+"&month="+month+"&day="+day, function(data) { flags.eventsJson = data; // сохранение данных в будущих фильтрах getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction); }).error(function() { showError("error getting json: ", flags.wrap); }); } else { // фильтр previus сохранен json getEventsData(flags, eventsOpts, flags.eventsJson, limit, year, month, day, direction); } if (day > '') { flags.wrap.find('.eventCalendar-current').removeClass('eventCalendar-current'); flags.wrap.find('#dayList_'+day).addClass('eventCalendar-current'); } }
@Deonis Привет, подкинь календарик мне который написан на js без хлама всякого) Буду работать пробовать с ним, спасибо.