Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Делаю парсинг экселевского документа. Есть массив и элемент со значением в нем:
94,8*63,2 R-4767 декор настенный комплект (пано из 3 шт.)
25*75 Boiserie Aston Relieve Плитка Настенная
40*60 Decor Candy Peonia Комплект (2 шт.) Декор Настенный
Как видим они бывают разные, иногда попадаются в середине (2шт), иногда в конце, а иногда этой части вовсе нет. Мне же нужно разбить строку на формат - это то, что первыми цифрами со звездочкой (94,8*63,2), коллекцию - это то, что латинскими буквами и типу - это то, что кириллицей. Помогите составить регулярное выражение которое разбивает массив на нужные мне значения. Можно даже так сначала извлечь формат и занести его в одну переменную, потом коллекцию в другую и тип в другую.
Плюс еще почему-то не работает пагинация. Ссылки генерируется, все вроде норм, но по страница не переходит.
На данной странице www.jaquet-droz()com/fr/search-products есть фильтр или поиск не знаю как правильно это назвать, мне нужно реализовать такой же. Весь сайт написан на л3, иначе использовал бы просто spinx он ведь для этих целей придуман правда? Нужна подсказка как реализовать можно. Первый подход:
public function post_filter($id) {
$collection = Collection::where('id', '=', $id)->first();
$products = Products::where('type_id', '=', $id)->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where('manufacturers_id', '=', Input::get('manufacturers'))->get();
}
}
if (Input::get('purpose') != "" or Input::get('purpose') != 0) {
$products = Products::where('type_id', '=', $id)->where('purpose', '=', Input::get('purpose'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where('purpose', '=', Input::get('purpose'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->where('purpose', '=', Input::get('purpose'))->get();
}
}
if (Input::get('min') != "" or Input::get('min') != 0 or Input::get('max') != "" or Input::get('max') != 0) {
$products = Products::where('type_id', '=', $id)->where_between('price', Input::get('min'), Input::get('max'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where_between('price', Input::get('min'), Input::get('max'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->where_between('price', Input::get('min'), Input::get('max'))->get();
}
if (Input::get('purpose') != "" or Input::get('purpose') != 0) {
$products = Products::where('type_id', '=', $id)->where('purpose', '=', Input::get('purpose'))->where_between('price', Input::get('min'), Input::get('max'))->get();
}
}
if (Input::get('min-more') != "" or Input::get('min-more') != 0) {
$products = Products::where('type_id', '=', $id)->where('price', '>', Input::get('min-more'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where('price', '>', Input::get('min-more'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->where('price', '>', Input::get('min-more'))->get();
}
if (Input::get('purpose') != "" or Input::get('purpose') != 0) {
$products = Products::where('type_id', '=', $id)->where('purpose', '=', Input::get('purpose'))->where('price', '>', Input::get('min-more'))->get();
}
}
if (Input::get('max-more') != "" or Input::get('max-more') != 0) {
$products = Products::where('type_id', '=', $id)->where('price', '>', Input::get('max-more'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where('price', '>', Input::get('max-more'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->where('price', '>', Input::get('max-more'))->get();
}
if (Input::get('purpose') != "" or Input::get('purpose') != 0) {
$products = Products::where('type_id', '=', $id)->where('purpose', '=', Input::get('purpose'))->where('price', '>', Input::get('max-more'))->get();
}
}
if (Input::get('formats') != "" or Input::get('formats') != 0) {
$products = Products::where('type_id', '=', $id)->where('id', '=', Input::get('formats'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where('id', '=', Input::get('formats'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->where('id', '=', Input::get('formats'))->get();
}
if (Input::get('purpose') != "" or Input::get('purpose') != 0) {
$products = Products::where('type_id', '=', $id)->where('purpose', '=', Input::get('purpose'))->where('id', '=', Input::get('formats'))->get();
}
}
if (Input::get('texture') != "" or Input::get('texture') != 0) {
$products = Products::where('type_id', '=', $id)->where('texture', '=', Input::get('texture'))->get();
if (Input::get('country') != "" or Input::get('country') != 0) {
$products = Products::where('type_id', '=', $id)->where('country_id', '=', Input::get('country'))->where('texture', '=', Input::get('texture'))->get();
}
if (Input::get('manufacturers') != "" or Input::get('manufacturers') != 0) {
$products = Products::where('type_id', '=', $id)->where('manufacturers_id', '=', Input::get('manufacturers'))->where('texture', '=', Input::get('texture'))->get();
}
if (Input::get('purpose') != "" or Input::get('purpose') != 0) {
$products = Products::where('type_id', '=', $id)->where('purpose', '=', Input::get('purpose'))->where('texture', '=', Input::get('texture'))->get();
}
if (Input::get('min') != "" or Input::get('min') != 0 or Input::get('max') != "" or Input::get('max') != 0) {
$products = Products::where('type_id', '=', $id)->where_between('price', Input::get('min'), Input::get('max'))->where('texture', '=', Input::get('texture'))->get();
}
}
$texture = Texture::where('collection_id', '=', 1)->get();
$formats = Formats::order_by('format', 'asc')->get();
$country = Country::all();
$manufacturers = Manufacturers::all();
$phone = Contact::where('id', '=', 1)->first();
return View::make("home.products")->with(array('products' => $products, 'texture' => $texture, 'formats' => $formats, 'manufacturers' => $manufacturers, 'country' => $country, 'collection' => $collection, 'id' => $id, 'phone' => $phone));
}
код еще можно посмотреть здесь http://paste.laravel.com/110j
Этим и займись. Есть отличная книга Дмитрия Котерова о PHP 5, в том числе в сети.
Мне щас надо
public function post_card($id) {
Cookie::put('title', Input::get('title'), 60);
return Redirect::to('/');
}
нужно корзину реализовать. В этом скрипте получаем title нужного товара и записываем его в куку. Проблема в следующем: Если я добавляю в корзину другой товар кука конечно же перезаписыватся. Да ты прав php выучить нужно
Как думаешь целесообразно будет корзину с помощью кеша реализовать — chache?
Что я хочу сделать. Я с помощью этого запроса
$chek_id = DB::table('collection')
->left_join('manufacturers', 'manufacturers.id', '=', 'collection.type_id')
->where('collection.type_id', '=', $id)
->get('manufacturers_id');
Вытаскивал manufacturers_id где все type_id = $id. То есть есть например категория керамика с id=1 который передается в url. Так же есть type_id в таблице продукция вот с ней то и сравнивается $id. Дальше вытаскиваются все manufacturers_id где type_id = $id. А потом мне нужно вытащить всех производителей где id = manufacturers_id. Этот manufacturers_id как видно из запроса записывается в переменную $chek_id. Дальше эту переменную нужно прогнать в цикле потому что возвращаемых данных может быть больше 1 как мы и наблюдали. А иначе как иначе никак. И дальше уже делать запрос такого вида
Manufacturers::where('id', '=', $chek_id[$i]->manufacturers_id) -> get();
Решение найдено:
<?php
class Manufacturers_Controller extends Base_Controller {
public $restful = true;
public function get_index($id) {
$chek_id = DB::table('collection')
->left_join('manufacturers', 'manufacturers.id', '=', 'collection.type_id')
->where('collection.type_id', '=', $id)
->get('manufacturers_id');
$manufacturers = array();
foreach ($chek_id as $id) {
$manufacturers[] = Manufacturers::where('id', '=', $id->manufacturers_id) -> get();
}
return View::make('home.manufacturers') -> with('manufacturers', $manufacturers);
}
}
}%> Во всей видимости это из за return.
Ну ты даёшь. Я думал у тебя объект меняется при передаче в шаблон или ещё что-то.В чём проблема с циклом? Либо передавай в шаблон массив всех нужных объектов, либо вызывай шаблон для каждого объекта, а результаты склеивай в строку. Я бы выбрал первый вариант: создаёшь отдельный шаблон тиа %%home.manufacturers%% или %%manufacturers.list%%, который вызывает в цикле шаблон %%home.manufacturer%% или %%manufacturers.info%%.
Проблема в том что когда я ввожу return view::make чтобы передать переменную в вид передается почему то один объект как только я убираю return view::make то выводится как положено все объекты Дело в том что это не целый массив. Посредством этих манипуляций возвращается 3 массива(объекта) которые я и так
public $restful = true;
public function get_index($id) {
$chek_id = DB::table('collection')
->left_join('manufacturers', 'manufacturers.id', '=', 'collection.type_id')
->where('collection.type_id', '=', $id)
->get('manufacturers_id');
for ($i = 0; $i < count($chek_id); $i++) {
$manufacturers = Manufacturers::where('id', '=', $chek_id[$i]->manufacturers_id) -> get();
}
return View::make('home.manufacturers') -> with('manufacturers', $manufacturers);
}
}
перебрать. Но я чего то не так делаю. Может их объединить сначала нужно. Я конечно знаю функцию объединение массивов, но вот объединить их я не смог. Массив вида. Получается в цикле for несколько раз присваивается значение массива в $manufacturers и все она потом теряется а рендерить вид десять раз не то, да и пробывал рендер вида в цикл занести тоже не выходитю Афигеть что же делать(((
Array
(
[0] => Manufacturers Object
(
[attributes] => Array
(
[id] => 1
[title] => ABK
[logo] => ABK.jpg
[preview_img] => preview_abk.jpg
[desc] => Плитка от производителя ABK самая лучшая в мире!!!
)
[original] => Array
(
[id] => 1
[title] => ABK
[logo] => ABK.jpg
[preview_img] => preview_abk.jpg
[desc] => Плитка от производителя ABK самая лучшая в мире!!!
)
[relationships] => Array
(
)
[exists] => 1
[includes] => Array
(
)
)
)
Array
(
[0] => Manufacturers Object
(
[attributes] => Array
(
[id] => 2
[title] => Cavalli
[logo] => cavalli.jpg
[preview_img] => preview_abk.jpg
[desc] => Ahuennaya plita ot Roberto
)
[original] => Array
(
[id] => 2
[title] => Cavalli
[logo] => cavalli.jpg
[preview_img] => preview_abk.jpg
[desc] => Ahuennaya plita ot Roberto
)
[relationships] => Array
(
)
[exists] => 1
[includes] => Array
(
)
)
)
}%Не могу ничего сказать. Возьми отладчик и пройдись по циклу, в таких случаях это куда быстрее, чем ждать ответа на форуме.
Во всей видимости это из за return. Нужно передать 3 объекта в вид. Причем они могут пополнятся значит в цикле. А как? Да это именно объекты так и написано manufacturers object
Извини нужно было сразу залогинится. var_dump возвращает 2 массива. Почему и в контролере выдается 1 результат понял. Это из-за return внутри foreach
- Если у тебя есть товар, а у него есть вариации, и товар хранится в таблице — логично создать вторую и хранить там только вариации. Либо сделать поле в первой и держать вариации там (serialize() и пр.), но тогда по ним нельзя будет выполнять запросы.
Еще один глупый вопрос:
Есть фильтр например:
В каждом из производителей может находиться несколько типов продукции, а может только одна. Все было бы просто, но я не хочу выводить всех производителей. Я хочу сделать чтобы по нажатию керамика выходили только производители содержащие керамическую продукцию. Пробовал по разному. Например в таблице с продукцией создавал type_id и manufacturers_id. По нажатию на фильтр проверялся type_id, а вот дальше трудности. Этот прием видимо не верен. Так же как и прием с созданием отдельной таблицы с type_id — пробовал.
}%Таблица с товарами (id, name, image, ...) и таблица с товарами по форматам (product_id, format_id, ...). В чём вопрос?
Не понял. 3 таблицы что ли создавать нужно?
Допустим имеется товар, а у него могут быть форматы 80х90, 90х30. У каждого товара может быть разное кол-во форматов и их может быть несколько. Как такое сделать так и не додумался. А возможно ли все занести в одну Mysql ячейку и потом как-то её расфасовать?
Пробовал запрос такого вида
INSERT INTO `products`(`formats`) VALUES ([value-1]),([value-2]);
Он создает 2 новые строки значит не подойдет.
Так ну можно сделать так:
Привязку по id опять же и в отдельную таблицу заносить все форматы соответствующего товара. Ну тогда нужно сделать дофигища ячеек на всякий случай ведь я не знаю точного кол-во форматов.
А вот если не нашли или не поняли, при этом указав, вот нашол или не нашол, помогите...
А так - считаю тупые вопросы задаются. Извините. если обидел кого.
Искал, но не так как нужно видимо
https://github.com/laravel/laravel/issues/1297
Я бы создал свой Хелпер и написал там свою функцию.
HTML::decode(HTML::link('#', HTML::image('img/file.jpg')));
спасибо помогло
}%Используй, пожалуйста, - я за тобой уже три поста правил.
извини не знал. А на мой вопрос не ответишь?
вернее получается
<a href="http://primo()ru/collection/1">
<img src="http://primo()ru/images/manufacturers/ABK.jpg" alt="ABK">
</a>
вот так выглядит но отображается как текст
{{ HTML::link("collection/$mfc->id",HTML::image("images/manufacturers/$mfc->logo", $mfc->title)) }}
так не получается
Хочу корзину сделать на сессиях.
сессии ведь на сервере хранятся.
Для каждого покупателя генерируется новая сессия?
Допустим имеем таблицу "Производители", "Типы", "Продуцкия". Продукция зависит от производителей и типов потому-что на сайте предусмотрен поиск по ним. Не буду вдоваться в подробности а сразу спрошу прокатит ли такое:
class Proizvoditeli extends Eloquent {
public funcion productions() {
return has_many("produtions");
}
}
class Types extends Eloquent {
public funcion productions() {
return has_many("produtions");
}
}
и в модели продукции соответственно:
class Productions extends Eloquent {
public funcion Proizvoditeli() {
return belongs_to("Proizvoditel");
}
public funcion Types() {
return belongs_to("Types");
}
}
Если такой вариант не прокатит как быть?
Возможно ли передать сразу несколько строк в базу данных с помощью массива скажем?
Ошибка в следующем
Warning: require(Z:\home\sss.ru\www\bootstrap/../vendor/autoload.php) [function.require]: failed to open stream: No such file or directory in Z:\home\sss.ru\www\bootstrap\autoload.php on line 17
Fatal error: require() [function.require]: Failed opening required 'Z:\home\sss.ru\www\bootstrap/../vendor/autoload.php' (include_path='.;C:\php\pear') in Z:\home\site.ru\www\bootstrap\autoload.php on line 17
Моя ошибка неправильно вписывал поля из бд. Извиите. Прогер спасибо!