Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.03.2017 14:22:01

Фильтрация в категории

Версия Laravel:5.2
Версия PHP: 5.6
Операционная система и её версия: Windows 10 x64

Задача, что должно происходить _в целом_, техническое задание:
    Как реализуется сортировка отображаемых данных на странице категории.
Сортировку при выборке реализовал, но как ее изменять уже в самом представлении не могу сообразить. При этом что-бы пагинация работала корректно.

Код:
Routes:

Route::resource('clinics', 'ClinicsController',[
    'parameters' => [
        'clinics' => 'alias'
    ]
]);

app\Http\Controllers\ClinicsController.php

namespace App\Http\Controllers;

use App\Repositories\Actions_clinicsRepository;
use App\Repositories\ClinicsRepository;
use App\Repositories\DirectionsRepository;
use App\Repositories\BranchesRepository;
use Illuminate\Http\Request;

use App\Http\Requests;

use Config;

class ClinicsController extends SiteController
{
    protected $clinics_rep;
    protected $branches_rep;
    protected $directions_rep;
    protected $actions_clinics_rep;

    public function __construct(Actions_clinicsRepository $actions_clinics_rep, ClinicsRepository $clinics_rep, DirectionsRepository $directions_rep, BranchesRepository $branches_rep)
    {
        parent::__construct(new \App\Repositories\MenusRepository(new \App\Menu));

        $this->actions_clinics_rep = $actions_clinics_rep;
        $this->clinics_rep = $clinics_rep;
        $this->directions_rep = $directions_rep;
        $this->branches_rep = $branches_rep;

        $this->template = env('THEME').'.clinics';
    }

    public function index()
    {
        $clinics = $this->getClinics();
        $directions = $this->getDirections();
        $actions_clinic = $this->getActions();
        $total_actions_clinic = $this->getTotalActions();
        $actions_branches = $this->getActions_branches();

        $content = view(env('THEME').'.clinics_content')->with('clinics', $clinics)->with('directions', $directions)
            ->with('actions_clinic', $actions_clinic)->with('total_actions_clinic', $total_actions_clinic)
            ->with('actions_branches', $actions_branches)->render();
        $this->vars = array_add($this->vars, 'content', $content);

        return $this->renderOutput();
    }

    protected function getClinics(){
        $clinics = $this->clinics_rep->get(['id','name','alias','district','metro','short_description','image','rating','plus'],FALSE,'name',TRUE);
        if($clinics){
            $clinics->load('branches','actions');
        }
        return $clinics;
    }

    protected function getDirections(){
        $directions = $this->directions_rep->get('*',FALSE,'name');
        return $directions;
    }

    protected function getActions(){
        $actions = $this->actions_clinics_rep->get(['image','name','clinic_id','short_description'], Config::get('settings.category_actions'), 'created_at');
        if($actions){
            $actions->load('actions_clinic');
        }
        return $actions;

    }

    protected function getTotalActions(){
        $total_actions = $this->actions_clinics_rep->get(['id']);
        $total_actions = count($total_actions);
        return $total_actions;
    }

    protected function getActions_branches(){
        $actions_branches = $this->branches_rep->get('*');
        if($actions_branches){
            $actions_branches->load('actions_branches');
        }
        return $actions_branches;
    }

}

App\Repositories\Repository.php

namespace App\Repositories;
use Config;

abstract class Repository{

    protected $model = FALSE;

    public function get($select = '*', $take = FALSE, $sort = 'created_at', $pagination = FALSE){

        $builder = $this->model->select($select);

        if($sort == 'sort_order' or $sort == 'name'){
            $builder->orderBy($sort, 'asc');
        }else{
            $builder->orderBy($sort, 'desc');
        }

        if($pagination){
            return $this->check($builder->paginate(Config::get('settings.paginate')));
        }

        if($take){
            $builder->take($take);
        }

        return $this->check($builder->get());
    }

    protected function check($result){
        if($result->isEmpty()){
            return FALSE;
        }

        $result->transform(function ($item, $key){
            if(is_string($item->image) && is_object(json_decode($item->image)) && (json_last_error() == JSON_ERROR_NONE)) {
                $item->image = json_decode($item->image);
            }
            return $item;
        });

        return $result;
    }

}

app\Clinic.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Clinic extends Model
{
    //
    public function branches()
    {
        return $this->hasMany('App\Branche');
    }

    public function actions()
    {
        return $this->hasMany('App\Actions_clinic');
    }

}

Не в сети

#2 22.03.2017 17:47:56

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Фильтрация в категории

Не легче ли использовать dedicate query string filtering то сто Джефри Вей делал? Там пара методов  всего, и все четко пашет

Не в сети

#3 05.04.2017 23:14:14

Re: Фильтрация в категории

TrueKanonir пишет:

Не легче ли использовать dedicate query string filtering то сто Джефри Вей делал? Там пара методов  всего, и все четко пашет

Спасибо, буду документацию искать...)

Не в сети

Подвал раздела