Забыл...
Цитата:
Если нужно заюзать метод 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: <input type="text" maxlength="3" name="m[top][v]" value="<?php echo Arr::get($menu,'top');?>"></th>
<th>Left: <input type="text" maxlength="3" name="m[left][v]" value="<?php echo Arr::get($menu,'left');?>"></th>
<th>Right: <input type="text" maxlength="3" name="m[right][v]" value="<?php echo Arr::get($menu,'right');?>"></th>
<th>Botton: <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 логичнее, но сложнее в деталях.