Intereting Posts
Как переопределить функцию запуска по умолчанию лезвия в laravel 5? Как загрузить объект BitmapData прямо на мой сервер? Как удалить повторяющиеся значения из многомерного массива в PHP Как получить данные из разных таблиц и сохранить их в массиве в Yii Выход из системы не уничтожает / очищает сеанс должным образом в FOSUserBundle Получение значения кнопки отправки в Laravel 5.3 PHP: помощь по почте PEAR Как я могу увидеть переменную, определенную в другом php-файле? Загрузите файл через PHP-скрипт с FTP-сервера в браузер с заголовком Content-Length без сохранения файла на веб-сервере php $ _COOKIE isset Одна форма с двумя кнопками отправки и различными действиями для каждой кнопки Использование PHP для загрузки файла и добавления пути к базе данных MySQL Расширение PHP xmlrpc и MAMP Операция обновления активной записи Codeigniter с соединением Импорт календарей iCal в базу данных MySQL

Laravel Множественная разбивка на одну страницу

У меня проблемы с разбиением на страницы. У меня есть две таблицы с данными из базы данных, и я разбил ее на страницы с помощью laravel Paginator.

Теперь моя проблема в том, когда вы идете, например, на страницу 2, она добавляет? Page = 2, но это делает первую таблицу также на странице 2.

Есть ли способ получить что-то вроде этого?

page_table1={number}&page_table2={number}

поэтому вы не применяете изменение страницы в других таблицах.

К сожалению, я не могу проверить этот код прямо сейчас, но просматривая документы и код (в Illuminate/Pagination/Environment ), я думаю, вы могли бы что-то вроде этого:

 # use default 'page' for this $collection1 = Model::paginate(20); # use custom 'other_page' for this $collection2 = Model2::paginate(20); $collection2->setPageName('other_page'); 

Метод setPageName() не документируется в документах, но он является общедоступным методом, наряду с документами, указанными в документации, поэтому он должен работать нормально. FOR, это объявление (1. 171-180 в vendor/laravel/framework/src/Illuminate/Pagination/Environment.php ):

 /** * Set the input page parameter name used by the paginator. * * @param string $pageName * @return void */ public function setPageName($pageName) { $this->pageName = $pageName; } 

Теперь учтите, что у вас будет другая строка запроса, добавленная к URL-адресу, поэтому вам нужно будет рассказать о том, как это сделать. Используйте метод appends() :

 $collection1->appends(array_except(Request::query(), 'page'))->links(); $collection2->appends(array_except(Request::query(), 'other_page'))->links(); 

То есть, сообщите каждому Presenter, чтобы он создал URL-адрес со всеми строками запроса (массив, полученный в результате Request::query() без текущего индекса, используемого paginator, или вы получите двойное значение). array_except() является встроенным помощником массива Laravel, который возвращает заданный массив (1-й параметр), очищенный от переданного индекса (2-й параметр).

Я постараюсь проверить этот код, как только смогу, но он должен работать. Дайте мне знать в любом случае!

Это простое решение, которое я нашел на Laravel 4.

контроллер

Измените имя страницы перед тем, как сделать paginator:

 Paginator::setPageName('page_a'); $collection_A = ModelA::paginate(10); Paginator::setPageName('page_b'); $collection_B = ModelB::paginate(10); 

Посмотреть

Сделайте то же самое: измените имя страницы перед печатью ссылок

 Paginator::setPageName('page_a'); $collection_A->links(); Paginator::setPageName('page_b'); $collection_B->links(); 

Если вы не хотите потерять состояние страницы во время перехода на другую страницу, добавьте к ссылкам текущую страницу из всех коллекций:

 Paginator::setPageName('page_a'); $collection_A->appends('page_b', Input::get('page_b',1))->links(); Paginator::setPageName('page_b'); $collection_B->appends('page_a', Input::get('page_a',1))->links(); 
 $publishedArticles = Article::paginate(10, ['*'], 'published'); $unpublishedArticles = Article::paginate(10, ['*'], 'unpublished'); 

Третий аргумент используется следующим образом:

Laravel / общественные / статьи? опубликовано = 3

Laravel / государственные / статьи? неопубликованные = 1

В Laravel 5.2 объявите имя страницы при использовании paginate() .

Вот пример, который работает с несколькими страницами на странице.

  • Не забудьте указать другое $pageName для других моделей.

См. Метод \Illuminate\Database\Eloquent\Builder::paginate()

 /** * Get things by ownerId * * @param integer $ownerId The owner ID. * * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator Returns a pagination instance. */ public function getThings($ownerId) { $builder = \App\Models\Things::where('ownerId', '=', (integer) abs($ownerId)); // dd([ // '__METHOD__' => __METHOD__, // '__FILE__' => __FILE__, // '__LINE__' => __LINE__, // '$ownerId' => $ownerId, // 'sql' => $builder->toSql(), // '$builder' => $builder, // 'paginate' => $builder->paginate($perPage = null, $columns = ['*'], $pageName = 'p', $page = null), // ]); return $builder->paginate($perPage = null, $columns = ['*'], $pageName = 'p', $page = null); } 

Примечание: $pageName = 'p'

в laravel 5.3 (maibe, работающий в другой версии laravel 5), я использую вот так:

  $produk = Produk::paginate(5, ['*'], 'produk'); $region = Region::paginate(5, ['*'], 'region'); 

и в шаблоне лопастей добавьте течения других, чтобы сохранить позицию:

  {{$produk->appends(['region' => $region->currentPage()])->links()}} {{$region->appends(['produk' => $produk->currentPage()])->links()}} 

Использование:

 $var1 = DB1::orderBy('...')->paginate(5, ['*'], '1pagination'); $var2 = DB2::orderBy('...')->paginate(5, ['*'], '2pagination'); 

Для Laravel 5.2

Мне кажется, что вам нужно обновить инструмент подкачки, чтобы он имел дополнительный параметр, который идентифицирует таблицу, поскольку он недостаточно умен, чтобы знать, что он может иметь 2 экземпляра себя на одной странице .. DOH!

Вместо того, чтобы устанавливать текущую страницу для всех таблиц через URL-адрес, в идеале вы хотите сохранить номер активной страницы в сеансе по идентификатору таблицы THEN, ваш скрипт должен беспокоиться только о инструкциях и не беспокоиться о том, что он содержит существующие номера страниц также.

Вот действительно проект концепции ….

 // The page would be $tableId + "," + $pageNum // Passed as a value of "page" $goTo = "$tableId,$pageNum"; ?page=$goTo 

Затем, когда он добирается до той части, которая получает ваши данные таблицы, она будет делать что-то вроде

 if(!empty($_GET["page"])){ list($tableId,$pageNum) = explode(",",$_GET["page"]); // Store table's active page number $_SESSION["_tableBrowser"][$tableId] = $pageNum; // Your table reader would then look at the session for the active page number // and not what is in $_GET }