CodeIgniter не передаёт $this->uri->segment(3) в функцию контроллера (передача переменной PHP->JavaScript->PHP)
Процесс путешествия переменной такой. Сначала в контроллере ей присваивается значение из строки URL, затем это значение отправляется в отображение (из PHP получается Javascript, впрочем в этом случае это не обязательно, так как в виде могут присутствовать и PHP переменные и Javascript). Дальше нам нужно с помощью опции jQuery $.ajax под названием data передать значение переменной по GET опять в контроллер. Там взять её $this->input->get('sch_teacher_id');
и передать в функцию модели как параметр.
Сначала было непонятно почему такой код работает
$this->sch_teacher_id = $this->ion_auth->user_by_username("vika")->row()->id;
А такой – нет?
$this->sch_teacher_id = $this->ion_auth->user_by_username($this->uri->segment(3))->row()->id;
Url – teamsense:8888/admin_schedule/teacher/vika
route.php содержит
$route['admin_schedule/teacher/(:any)'] = "admin_schedule/index/$1";
Эти коды пишу в контроллере в function __construct(), и пытаюсь использовать их результат в других 3-х функциях этого же контроллера. Оказывается что $this->uri->segment(3) теряется где-то (!!!) и следующая функция user_by_username
выдаёт не викины уроки, а мои собственные (залогиненного пользователя, чmb данные сохранены в сессии)
public function user_by_username($username = FALSE)
{
$this->trigger_events('user');
//if no id was passed use the current users id
$username || $username = $this->session->userdata('username');
$this->limit(1);
$this->where($this->tables['users'].'.username', $username);
$this->users();
return $this;
}
Генерируется страница следующим образом. Контроллер admin_schedule имеет функцию index, которая рендерит представление index.php. И в этом представлении я использую ajax вызов с помощью jQuery, вызывающий выполнение другой функции в контроллере admin_schedule. Вот этот вызов:
...
{
url: '/admin_schedule/get_schedule_db_recurring_events_on_daysweek/',//"<?echo $data_path?>",
backgroundColor: 'red',
}
а вот функция в контроллере — get_schedule_db_recurring_events_on_daysweek()
function get_schedule_db_recurring_events_on_daysweek()
{
...
$sch_teacher_id = $this->uri->segment(3); // <--- this doesn't work, but $sch_teacher_id = 111 works perfectly
$result=$this->Schedule_model->get_schedule_recurring_events_on_daysweek($start, $end, $sch_teacher_id);
...
}
Решение проблемы:
Думаю всё дело в ajax вызове. Так, когда в контроллере код:
function __construct() { parent::__construct(); ... $this->sch_teacher_row = $this->ion_auth->user_by_username($this->uri->segment(3))->row(); $this->data['sch_teacher_id'] = $this->sch_teacher_row->id; $this->data['subtitle'] = $this->sch_teacher_row->username; }
То я получаю верное значение ID для Вики (например, '911') в представлении, но не в другую функцию из того же контроллера. Но я могу передать это знасение (sch_teacher_id) теперь из представления обратно в контроллер вызовом опции jQuery $.ajax – data:
eventSources: [ ... { url: '/admin_schedule/get_schedule_db_recurring_events_on_daysweek/',//"<?echo $data_path?>", type: 'GET', data: {sch_teacher_id: sch_teacher_id}, backgroundColor: 'red', } ],
И дальше (с другой стороны горы – в контроллере) поймать значение с помощью параметра GET и пнуть его в функцию модели:
function get_schedule_db_recurring_events_on_daysweek() { ... $sch_teacher_id_from_view = $this->input->get('sch_teacher_id'); $result=$this->Schedule_model->get_schedule_recurring_events_on_daysweek($start, $end, $sch_teacher_id_from_view); ... }
Вот и весь брейкданс. Дальше функция эта выберет из базы данных то, что требуется!
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 CodeIgniter: Всплывающая форма обратной связи на Ajax в Bootstrap Modal и проверкой Captcha (18.02.2014)
- 0 Opencart: Модуль Filter Product OpenCart_v1.5.x: Как скрывать недоступные опции в фильтре (23.10.2013)
- 0 WordPress: Добавить ссылку "Сохранить фото" для галереи на NextGen с эффектом Lightbox (12.04.2013)
- Выдвигающаяся из значка форма поиска на сайте (27.11.2017)
- Как убрать placeholder при клике по input (04.11.2017)
- Свой дизайн кнопок социальных сетей для сайта. Кнопки "Поделиться" (19.06.2017)
- Загрузка файлов (картинок) по ajax через форму для Opencart (04.09.2016)
- Замена текста при наведении на него мышью. События onmouseover и onmouseout (25.03.2016)
- Прилипание блока к верху сайта при его прокручивании (17.02.2016)
- Разделитель тысяч в эффекте наматываемого счётчика jquery countTo (05.04.2015)
- Сделать слайдер на Owl Carousel c текстом справа (03.02.2015)
- Скролл-эффекты CSS3 и JQuery при прокрутке страницы (13.01.2015)
- Модальное окно Bootstrap 3 с формой, отправляющей email по Ajax (JQuery/PHP/HTML5/JqBootstrapValidation) (20.08.2015)
- Несколько функций в body onload (08.03.2013)
- Как в iframe показывать только определённую область страницы (04.03.2013)
- Как правильно обновить ExpressionEngine до последней версии 2.5.5 (05.02.2013)
- Team Sense: Доступна отправка сообщения/письма на email сотрудника. (18.01.2013)
- TeamSense: username (логин) в регистрации пользователя. Внедрили библиотеку DHTMLX в TeamSense. (11.01.2013)
- Team Sense: В календарь добавлена возможность указывать место проведения уроков (в офисе, на выезде) (12.12.2012)
- jQuery Tooltips от Jörn Zaefferer. Всплывающие подсказки с помощью jQuery (08.12.2012)
- Team Sense: Многопользовательский календарь, заменяем радиокнопки на чекбоксы в выборе преподавателей. Массивы в Javascript. (06.12.2012)
- Team Sense: В календарь-расписание уроков добавлено разделение по преподавателям, которым присвоены свои цвета. (04.12.2012)
- CodeIgniter не передаёт $this->uri->segment(3) в функцию контроллера (передача переменной PHP->JavaScript->PHP) (28.11.2012) ← вы тут
- Случаи возникновения ошибки в IE: "Предполагается наличие идентификатора, строки или числа" (Expected identifier, string...) (23.11.2012)