Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 18:21

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 28 апр 2013, 19:56 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Цитата:
1. вот так делать не стоит. нужно данные методы определить в конкретной модели, чтобы не таскать их по всем моделям.

Я вас понял, но считаю по другому. Пускай будет, вдруг я захочу еще что-нибудь добавить в меню.
Цитата:
2. function addMenu как-то странно на мой взгляд реализована, DB быть не должно добавьте лучше явно атрибут $pages в модель и через него сохраняйте,а еще лучше расширьте ORM

Я тут ни чего не изобретал - это копия родной ORM функции add. Просто скопировал и переделал под нужды. Вроде это и называется расширить, могу ошибаться.
Пускай будет не addMenu, а addWithPosition.
Цитата:
лучше расширьте ORM так, чтобы он использовал get\set\save еще и для связующей таблицы.

А вот тут я вас не понял.
Цитата:
4.не 'menu', а 'Menu' т.к. модель называется Model_Menu

Позвольте не согласится. Именно menu, так как тут:
Код:
class Model_Page extends ORM_MPTT{
    protected $_has_many = array(
            'menu' => array(          // Вот тут тоже menu
                'model' => 'Menu',    // А вот здесь да, с большой буквы
                'through' => 'menus_pages',
                'sort' => 'sort',
        ),
    );
}

Цитата:
Я бы делал так:В виде задаем id меню

Все верно, но я чуток извратился и у меня не одно меню, а четыре. Вот я говорил, что не красивый массив))
Цитата:
В контроллере создаем модель меню(которая в свою очередь через $pages связана с таблицей menus_pages), удаляем все страницы для данного меню, передаем POST данные в модель и сохраняем.

Я и показал модель меню, в которой есть доп строчка sort.
Если нужно заюзать метод addMenu, то добавляем ее в модель и все.
Повторюсь, то что показал выше работает)
Кстати тут родной метод remove отрабатывает на ура.
Цитата:
5. всю работу с данными осуществляют в моделях, контроллер служит только для пере.....

Благодарю за совет, учту.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 28 апр 2013, 20:16 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Прям смотришь на всех вас со стороны и глаз радуется :) Толковые Kohana-девелоперы выйдут. Всё таки есть повод гордится и за Россию. А то я уж было стал думать, что адекватных девелоперов, способных копаться в коде у нас нет практически


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 28 апр 2013, 23:29 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Забыл...
Цитата:
Если нужно заюзать метод addMenu, то добавляем ее в модель и все.

Ну и соответственно в связующей таблице должны быть колонка, которую мы задаем тут:
Код:
'sort' => 'name', // name - имя колонки отведенное под сортировку


Sergey, стараемся. А что вы посоветуете?
Если я учту пожелания/рекомендации WinterSilence, то мне придется расширить метод addMenu.
И скорее всего, по мимо опции sort в модели придется перечислять еще и виды меню - top,left,right,bottom. Ну хочется мне 4-е меню....
Это получается так громоздко, надо сперва описать в модели, потом не забыть передать эти параметры из вида.
Ведь так быстрее и проще(чуть-чуть переделал ранее выложенный):
Код:
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Menus {
    public function setMenu($array,$alias,$type){
        $data['alias']=$alias; $data['type']=$type;
        foreach($array as $key=>$value){
            $data['position']=$key;
            $menus = ORM::factory('Menu')->where('alias','=',$data['alias'])->and_where('position','=',$data['position'])->find();
            if(isset($value['s'])){
                $data['value']=$value['v'];$menus->values($data);$menus->save();
            }else{if($menus->loaded()){$menus->delete();}}
        }
    }
    public function getMenu($alias,$type){
        $menu=array();
        $arrays = ORM::factory('Menu')->where('alias','=',$alias)->find_all()->as_array();
        foreach($arrays as $array){
            $menuData=$array->as_array();
            $menu[$menuData['position']]=$menuData['value'];
        }
        return $menu;
    }
}

И где нужно заюзать, просто:
Код:
$menus = new Model_Menus();
$menus->setMenu($data['m'],$data['alias'],'page');
$menu = $menus->getMenu($alias,'page');

Ну и формируем, а вот тут пока не очень красиво:
Код:
$menus = ORM::factory('Menu')->order_by('value','ASC');
$topmenus = $menus->where('position','=','top')->find_all()->as_array();
$topmenu=array();
foreach($topmenus as $k=>$v){
    $topmenu[$k]['position'] = $v->value;
    $topmenu[$k]['name'] = ORM::factory('Page')->where('alias','=',$v->alias)->find()->name;
    if($k==0){  // Если элемент первый в массиве
        $topmenu[$k]['url'] = '/';
        $this->homepage = ORM::factory('Page')->where('alias','=',$v->alias)->find()->as_array();
    }else{$topmenu[$k]['url'] = '/'.$v->type.'/'.$v->alias;}
}

Мой вид:
Код:
<table class="menu">
    <tbody>
        <tr>
            <th>Top:&emsp;<input type="text" maxlength="3" name="m[top][v]" value="<?php echo Arr::get($menu,'top');?>"></th>
            <th>Left:&emsp;<input type="text" maxlength="3" name="m[left][v]" value="<?php echo Arr::get($menu,'left');?>"></th>
            <th>Right:&emsp;<input type="text" maxlength="3" name="m[right][v]" value="<?php echo Arr::get($menu,'right');?>"></th>
            <th>Botton:&emsp;<input type="text" maxlength="3" name="m[botton][v]" value="<?php echo Arr::get($menu,'botton');?>"></th>
        </tr>
        <tr>
            <td><input data-no-uniform="true" type="checkbox" class="iphone-toggle" name="m[top][s]" <?php if(Arr::get($menu,'top')){echo 'checked';}?>></td>
            <td><input data-no-uniform="true" type="checkbox" class="iphone-toggle" name="m[left][s]" <?php if(Arr::get($menu,'left')){echo 'checked';}?>></td>
            <td><input data-no-uniform="true" type="checkbox" class="iphone-toggle" name="m[right][s]" <?php if(Arr::get($menu,'right')){echo 'checked';}?>></td>
            <td><input data-no-uniform="true" type="checkbox" class="iphone-toggle" name="m[botton][s]" <?php if(Arr::get($menu,'botton')){echo 'checked';}?>></td>
        </tr>
    </tbody>
</table>

извиняюсь за подробную копию...
Единственное за чем нужно следить, дак это что бы колонки в таблицы назывались так же как они используются в модели.
Ни знаю какую реализацию и выбрать, обе нравятся.
Моя вроде как проще, с расширением ORM логичнее, но сложнее в деталях.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 29 апр 2013, 10:05 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Цитата:
Я вас понял, но считаю по другому. Пускай будет, вдруг я захочу еще что-нибудь добавить в меню.

ну так сделайте класс ORM_Menu extends ORM и потом развивайте уже

Цитата:
Позвольте не согласится. Именно menu, так как тут:

ага пардоньте) с factory перепутал

Компактные формы:
http://kohanaframework.org/3.0/guide/api/Form#checkbox
Form::checkbox('remember_me', 1, (bool) $remember);
и есть еще неплохой модуль Formo для создания форм в духе ооп

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 29 апр 2013, 10:31 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Цитата:
ну так сделайте класс ORM_Menu extends ORM и потом развивайте уже

Действительно, благодарю.
До форм и других хелперов пока руки не доходят, скоро займусь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 29 апр 2013, 17:32 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Я люблю читать код. Любой. Это как пытаться думать чужой головой. Читая чужой код становится ясно другое мировоззрение, взгляд на вещи другого человека. Очень интересно.

А по поводу меню - много лишнего у вас вырисовывается. Насколько я могу судить, бегло просмотрев ваши ответы в этом посте, вы пытаетесь запихнуть в один класс для работы с меню, интерфейс практически для всего :) Попробуйте писать код в духе чистого ООП. То что связано с регионами (верхнее меню, нижнее меню и т.д.) должно обрабатываться отдельным классом, отвечающим за регионы. То что связано с модулями должно обрабатываться отдельным классом модулей. Для работы с меню вам скорее всего лучше подойдёт не ORM а ORM_MPTT так как он лучше работает с деревьями. Кроме всего прочего у вас должен быть отдельный класс (не контролёр), может быть хелпер, отвечающий за повседневные задачи при работе с меню. Ну и само собой контролёр. Вот, может быть будет интересно, взгляните на это:
Gleez_Menu
Model_Menu


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 29 апр 2013, 22:20 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Sergey> ORM_MPTT он использует, а я вот не встречал, расскажите поподробнее что за зверь?

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 30 апр 2013, 11:50 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Рекомендую
Nested set model
ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ
Overview of the functionality of Kohana MPTT


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 30 апр 2013, 15:49 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Sergey> ааа,я думал что-то большее, я использую nested set из doctrine2

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM связи и значения
СообщениеДобавлено: 30 апр 2013, 16:07 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Позвольте вопрос наперед, пока не разбирался.
ORM_MPTT включает все возможности класса NESTED SETS?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group