 |
Бывалый |
Зарегистрирован: 01 май 2012, 23:50 Сообщения: 72
|
да именно он) сейчас сам пытаюсь прикрутить к материалам..если что надеюсь вы подскажите) а то друг уехал( ======================================хотел бы уточнить один нюанс смотрите вот всего у меня пользователей на 2 стр если фильровать к примеру по студентам то выдается на 1 стр, но почему то внизу показывает вторую, жму на вторую стр а там пусто из-за чего так? =======================================все таки нужна ваша помощь...думал легко сделаю, так же но есть нюансы вот смотрите файл материалс (контроллер) Код: <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Materials extends Basecontroller { protected $layout = 'layouts/main'; public function init() { $this->checkRole('teacher'); } public function action_index() { $data = array(); $filter = Session::instance()->get('materialsFilter', array()); $user = Auth::instance()->get_user(); if ($this->isPressed('btnFilter')) { $filter['FIO'] = Arr::get($_POST, 'FIO'); Session::instance()->set('materialsFilter', $filter); } $material = ORM::factory('material'); if ($user->isAdmin()) { $data['materials'] = $material->getMaterialsByTeacher(NULL, NULL, $filter); } else { $data['materials'] = $material->getMaterialsByTeacher($user->id); } $data['isAdmin'] = $user->isAdmin(); $data['filter'] = $filter; // получаем общее количество материалов $count = ORM::factory('material')->count_all();
// передаем значение количества материала в модуль pagination и формируем ссылки $pagination = Pagination::factory(array('total_items' => $count))->route_params (array('controller' => Request::current()->controller(), 'action' => Request::current()->action(),)); //получаем пользователей с указанной позиции ($pagination->offset) //и указанное количество на страницу ($pagination->items_per_page) $material->limit($pagination->items_per_page) ->offset($pagination->offset)->find_all(); $data['pagination'] = $pagination; $this->tpl->content = View::factory('materials/index', $data); } public function action_stats() { $data = array(); $errors = array(); $filter = Session::instance()->get('statFilter', array()); if ($this->isPressed('btnFilter')) { $filter['FIO'] = Arr::get($_POST, 'FIO'); $filter['dateFrom'] = Arr::get($_POST, 'dateFrom'); $filter['dateTo'] = Arr::get($_POST, 'dateTo'); Session::instance()->set('statFilter', $filter); if (($filter['dateFrom'] != '') && !Valid::mydate($filter['dateFrom'])) $errors['dateFrom'] = 'Дата должна быть в формате dd.mm.yyyy'; if (($filter['dateTo'] != '') && !Valid::mydate($filter['dateTo'])) $errors['dateTo'] = 'Дата должна быть в формате dd.mm.yyyy'; } $material_id = $this->request->param('id', NULL); $material = ORM::factory('material', $material_id); $data['materialName'] = $material->materialName; $data['stats'] = $material->getStats($material_id, $filter); $data['count'] = count($data['stats']); $data['filter'] = $filter; $data['errors'] = $errors; $this->tpl->content = View::factory('materials/stats', $data); } public function action_add() { $this->edit(NULL, 'add'); } public function action_edit() { $id = $this->request->param('id', NULL); $this->edit($id, 'edit'); } public function edit($id, $mode) { $data = array(); $data['errors'] = array(); $data['mode'] = $mode; $material = ORM::factory('material', $id); $user = ORM::factory('user'); $isAdmin = $user->isAdmin(); $data['isAdmin'] = $isAdmin; if ($this->isPressed('btnSubmit')) { $file = Validation::factory($_FILES); // $file->rule('materialFile', 'Upload::not_empty')); $file->rule('materialFile', 'Upload::valid'); $file->rule('materialFile', 'Upload::type', array(':value', array( 'jpg', 'gif', 'png', 'tif', 'tiff', 'pdf', 'djv', 'djvu', 'txt', 'doc', 'docx', 'xls', 'xlsx', 'odt', 'ods', 'odp', 'odg', 'odm', '7z', 'arj', 'rar', 'zip', 'mp3', 'avi', 'mkv', 'mp4', 'flv', ))); $file->rule('materialFile', 'Upload::size', array(':value', '50M')); if (!$isAdmin) { $_POST['teacher_id'] = Auth::instance()->get_user()->id; } $material->values($_POST); $materialError = $fileError = FALSE; try { $material->check(); } catch (ORM_Validation_Exception $e) { $materialError = TRUE; $data['errors'] = $e->errors('validation', FALSE); } if (!$file->check()) { $fileError = TRUE; $data['errors'] = Arr::merge($data['errors'], $file->errors('upload', FALSE)); } if (!$materialError && !$fileError) { $material->save(); // Если файл был загружен, то обработать его if (!empty($_FILES['materialFile']['tmp_name'])) { // удаляем старый файл, если имеется $material->deleteFile(); //определяем имя файла, под которым будет записан материал $path_parts = pathinfo($_FILES['materialFile']['name']); $filename = $material->getFileName($path_parts['extension']); $material->filename = $filename; $material->url = ''; // если мы загружаем файл, то ссылка на сторонний ресурс бессмысленна $savedfilename = Upload::save($file['materialFile'], $filename, 'files'); if ($savedfilename === FALSE) throw new Exception('Unable to save uploaded file!'); } // если не было загрузки файла а был установлен URL, то удалить файл, если таковой имеется if ($material->url != '') $material->deleteFile(); $material->save(); Request::initial()->redirect('materials.html'); } } $data['values'] = $material->as_array(); $cat = new Model_Category; $data['tree'] = $cat->getTree(); $data['teachers'] = $user->getTeachers(); $this->tpl->content = View::factory('materials/edit', $data); } public function action_delete() { $material_id = $this->request->param('id', NULL); $material = ORM::factory('material', $material_id); $material->delete(); Request::initial()->redirect('materials.html'); } }
я попытался вставить в екшен индекс, так же вывел через вид и на нужной странице ничего нет..впрошлый раз надо было покопатся еще в модели, но там сейчас по моему ничего нет ну если что вот сама модель Код: <?php defined('SYSPATH') or die('No direct script access.');
class Model_Material extends ORM { protected $filesDirectory = 'files/'; public function __construct($id = NULL) { $this->add_empty_rule('checkMaterialExists'); parent::__construct($id); } protected $_created_column = array( 'column' => 'ctime', 'format' => TRUE, ); protected $_updated_column = array( 'column' => 'mtime', 'format' => TRUE ); public function rules() { return array( 'node_id' => array( array('not_empty'), array('digit'), array('check_id', array(':value', 'tree')), ), 'teacher_id' => array( array('not_empty'), array('digit'), array('check_id', array(':value', 'users')), ), 'subjectName' => array( array('not_empty'), array('max_length', array(':value', 250)), ), 'materialName' => array( array('not_empty'), array('max_length', array(':value', 1000)), ), 'access' => array( array('not_empty'), array('regex', array(':value', '/^(all|auth)$/')), ), 'filename' => array( array('max_length', array(':value', 50)), ), 'url' => array( // array('not_empty'), array('url'), array('max_length', array(':value', 250)), array(array($this, 'checkMaterialExists'), array(':value', 'materialFile')), ), ); } public function checkMaterialExists($value, $uploadedFileField) { // если url не пустой, то ок if ($value != '') return TRUE; // если файл уже был загружен ранее а сейчас нет, то ок if (is_file($this->filesDirectory.$this->filename)) return TRUE; // далее проверяем, был ли загружен файл if (!isset($_FILES[$uploadedFileField]['name'])) return FALSE; if ($_FILES[$uploadedFileField]['name'] != '') return TRUE; return FALSE; } // Возвращает список материалов по указанному преподавателю public function getMaterialsByTeacher($teacher_id=NULL, $node_id=NULL, $filter=NULL) { $cat = new Model_Category; $qry = DB::select('materials.*', array('users.name', 'name') ) ->join('users', 'left')->on('users.id', '=', 'materials.teacher_id') ->from('materials'); if ($teacher_id) { $qry->where('teacher_id', '=', $teacher_id); } if ($node_id) { $qry->where('node_id', '=', $node_id); } if (isset($filter['FIO']) && ($filter['FIO'] != '')) { $qry->where('name', 'like', '%'.$filter['FIO'].'%'); } if (!$teacher_id) { $qry->order_by('users.name', 'asc'); } $data = $qry->order_by('subjectName', 'asc') ->order_by('ctime', 'asc') ->execute() ->as_array(); foreach ($data as $key => $item) { $data[$key]['path'] = $cat->getPath($item['node_id']); $data[$key]['isLeaf'] = $cat->isLeaf($item['node_id']); $data[$key]['link'] = $this->getLink($item); } return $data; } // Возвращает список преподавателей, сгруппированных по идентификатору ноды для вывода в дереве материалов public function getTeachersGropupByNode() { $data = DB::select('materials.*', array('users.name', 'name') ) ->from('materials') ->join('users', 'left')->on('users.id', '=', 'materials.teacher_id') ->group_by('materials.node_id') ->group_by('materials.teacher_id') ->order_by('users.name', 'asc') ->execute(); // ->as_array(); $result = array(); foreach ($data as $item) { $idx = $item['node_id']; if (!isset($result[$idx])) { $result[$idx] = array(); } $result[$idx][] = $item; } return $result; } public function getLink($item) { if ($item['filename'] != '') { return $this->filesDirectory.$item['filename']; } else { return $item['url']; } } // метод засчитывает загрузку материала и добавляет запись в таблицу статистики загрузки public function countDownload() { $auth = Auth::instance(); if (!$auth->logged_in()) return; $user_id = $auth->get_user()->id; $stat = ORM::factory('download'); $stat->material_id = $this->id; $stat->user_id = $user_id; $stat->ctime = time(); $stat->save(); } protected function mydateToUnixTime($mydate) { // вычисляем ctime из cdate $mydate = str_replace(array(',', '/', '-'), '.', $mydate); $parts = explode('.', $mydate); if (count($parts) != 3) throw new Exception('Invalid $mydate'); $unixTime = mktime(0, 0, 0, (int) $parts[1], (int) $parts[0], (int) $parts[2]); if ($unixTime === FALSE) throw new Exception('Invalid $mydate'); return $unixTime; } public function getStats($id, $filter=array()) { $fltDateFrom = trim(Arr::get($filter, 'dateFrom', '')); $fltDateTo = trim(Arr::get($filter, 'dateTo', '')); $fltFIO = trim(Arr::get($filter, 'FIO', '')); if ($fltDateFrom) try { $fltDateFrom = $this->mydateToUnixTime($fltDateFrom); } catch (Exception $e) { $fltDateFrom = ''; } if ($fltDateTo) try { $fltDateTo = $this->mydateToUnixTime($fltDateTo); } catch (Exception $e) { $fltDateTo = ''; } $stats = ORM::factory('download'); $stats->join('users', 'LEFT')->on('users.id', '=', 'download.user_id'); $stats->where('material_id', '=', $id); if ($fltDateFrom) $stats->where('ctime', '>', $fltDateFrom); if ($fltDateTo) $stats->where('ctime', '<', $fltDateTo+86400); if ($fltFIO) $stats->where('name', 'like', '%'.$fltFIO.'%'); $stats->order_by('ctime', 'desc'); $result = $stats->find_all(); return $result; } public function deleteFile() // really public ??? { if (!$this->loaded()) throw new Exception('Cannot delete file because model is not loaded.'); if ($this->filename != '') @unlink($this->filesDirectory.$this->filename); $this->filename = ''; } public function getFileName($extension) // really public ??? { if (!$this->loaded()) throw new Exception('Cannot ctreate filename because model is not loaded.'); return $this->id.'.'.$extension; } public function delete() { $this->deleteFile(); parent::delete(); } }
_________________ iReznik.com
|
|