Autor | Zpráva | ||
---|---|---|---|
Tirus Profil |
#1 · Zasláno: 1. 4. 2014, 20:12:46
V tuto chvíli mám presenter s metodou List v této podobě
public function renderList($id = null) { if (!$this->user->isAllowed('AdminUsers')) { $this->error($this->translator->translate('messages.error.sufficientPermissions'), \Nette\Http\IResponse::S403_FORBIDDEN); } $sessionData = $this->getSession(self::SEARCH_USER_BOX_NAME); $users = $this->adminUserManagerModel->getUserList($sessionData->where); if (!$users) { $this->template->userList = array(); } else { $vp = new \VisualPaginator\VisualPaginator($this, 'usersPaginator'); $paginator = $vp->getPaginator(); $paginator->itemsPerPage = $this->systemInformation->number_posts_admin_view; $paginator->itemCount = count($users); $this->template->userList = $users->fetchAll($paginator->offset, $paginator->itemsPerPage); } } public function getUserList($where = array()) { $result = array(); $sql = array(); $sql[] = 'SELECT ' . self::COLUMN_ID . ', ' . self::COLUMN_ROLE . ', ' . self::COLUMN_EMAIL . ', ' . self::COLUMN_USERNAME . ', ' . self::COLUMN_SURNAME . ', ' . self::COLUMN_FIRST_NAME . ', ' . self::COLUMN_ACTIVATED . ', ' . self::COLUMN_REGISTERED_AT . ', ' . self::COLUMN_LOGGED_AT . ', ' . self::COLUMN_EMAIL_ENABLE . ', ' . self::COLUMN_MIDDLE_NAME . ', ' . self::COLUMN_PHONE . ', ' . self::COLUMN_WEB . ', ' . self::COLUMN_YOUTUBE . ', ' . self::COLUMN_GOOGLE . ', ' . self::COLUMN_FACEBOOK . ', ' . self::COLUMN_SKYPE . ', ' . self::COLUMN_IRC . ', ' . self::COLUMN_AVATAR . ' FROM security_users WHERE 1=1'; if (count($where) > 0) { if (isset($where['role'])) { $sql[] = ' AND ('; $tmp = array(); $i = 1; foreach ($where['role'] as $role) { $sql[] = ($i > 1 ? ' OR ' : null) . 'role = %s '; $sql[] = $role; ++$i; } $sql[] = ')'; } foreach ($where as $key => $value) { if ($key == self::COLUMN_EMAIL || $key == self::COLUMN_USERNAME) { $sql[] = ' AND ' . $key . ' LIKE %~like~'; $sql[] = $value; } } } return $this->database->query($sql); } Ovšem toto mi nepříjde jako nejlepší návrh. Jak řešit toto filtrování? (využívám nové nette a dibi) Děkuji za jakoukoliv radu(nakopnutí) ke správnému návrhu |
||
Tirus Profil |
Už jsem dostal profackováno, že bych to měl přepsat do tříd a rozhraní.. ale tu jsem nějak zkončil (vím, že ty kody spolu moc nesouvisí obsahově, ale pochopím aspoň jak na to)
Zkusil jsem něco takového, ale u tohoto jsem fakt nějak v pr.. :( <?php interface IArticle { public function find($id); public function create($data); public function delete($id); public function edit($id,$data); public function findAll(); } class Story implements IArticle { public function find($id){ return $this->database->query('SELECT * FROM story WHERE id = %i',$id)->fetch(); } public function create($data){ } public function delete($id){ return $this->database->delete('story')->where(array('id=%i'=>$id)); } public function edit($id,$data){ } public function findAll(){ return $this->database->query('SELECT * FROM story'); } } |
||
Časová prodleva: 10 let
|
0