Laravel по-русски

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

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

#1 Веб-разработка » Бьюсь второй день. Нужна помощь с регуляркой » 31.10.2013 16:08:16

umarov
Ответов: 9

Делаю парсинг экселевского документа. Есть массив и элемент со значением в нем:

94,8*63,2 R-4767 декор настенный комплект (пано из 3 шт.)
25*75 Boiserie Aston Relieve Плитка Настенная
40*60 Decor Candy Peonia Комплект (2 шт.) Декор Настенный

Как видим они бывают разные, иногда попадаются в середине (2шт), иногда в конце, а иногда этой части вовсе нет. Мне же нужно разбить строку на формат - это то, что первыми цифрами со звездочкой (94,8*63,2), коллекцию - это то, что латинскими буквами и типу - это то, что кириллицей. Помогите составить регулярное выражение которое разбивает массив на нужные мне значения. Можно даже так сначала извлечь формат и занести его в одну переменную, потом коллекцию в другую и тип в другую.

#2 Re: Laravel 3 » [L3] Фильтры » 23.10.2013 01:19:00

Плюс еще почему-то не работает пагинация. Ссылки генерируется, все вроде норм, но по страница не переходит.

#3 Laravel 3 » [L3] Фильтры » 23.10.2013 00:57:07

umarov
Ответов: 3

На данной странице 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

#4 Re: Laravel 3 » Как правильно записать куку » 29.07.2013 12:28:11

Proger_XP пишет:

Этим и займись. Есть отличная книга Дмитрия Котерова о PHP 5, в том числе в сети.

Мне щас надо

#5 Laravel 3 » Как правильно записать куку » 29.07.2013 11:35:11

umarov
Ответов: 2
public function post_card($id) {

		Cookie::put('title', Input::get('title'), 60);

		return Redirect::to('/');

	}

нужно корзину реализовать. В этом скрипте получаем title нужного товара и записываем его в куку. Проблема в следующем: Если я добавляю в корзину другой товар кука конечно же перезаписыватся. Да ты прав php выучить нужно

#6 Re: Laravel 3 » Как это можно реализовать? » 28.07.2013 17:59:33

Как думаешь целесообразно будет корзину с помощью кеша реализовать — chache?

#7 Re: Laravel 3 » Как это можно реализовать? » 27.07.2013 20:54:53

Что я хочу сделать. Я с помощью этого запроса

$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);
  } 


}

#8 Re: Laravel 3 » Как это можно реализовать? » 27.07.2013 20:38:27

  1. По-моему тебе надо подучить PHP. У тебя в цикле переменная $manufacturers трижды перезаписывается. Естественно там сохраняется только последний объект. С return аналогично, только наоборот — возвращается первый объект.

любой цикл перезапишет тебе переменную

#9 Re: Laravel 3 » Как это можно реализовать? » 27.07.2013 19:41:56

Proger_XP пишет:

}%> Во всей видимости это из за 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
                (
                )

        )

)

#10 Re: Laravel 3 » Как это можно реализовать? » 27.07.2013 16:19:12

Proger_XP пишет:

}%Не могу ничего сказать. Возьми отладчик и пройдись по циклу, в таких случаях это куда быстрее, чем ждать ответа на форуме.

Во всей видимости это из за return. Нужно передать 3 объекта в вид. Причем они могут пополнятся значит в цикле. А как? Да это именно объекты так и написано manufacturers object

#11 Re: Laravel 3 » Как это можно реализовать? » 27.07.2013 15:50:10

Извини нужно было сразу залогинится. var_dump возвращает 2 массива. Почему и в контролере выдается 1 результат понял. Это из-за return внутри foreach

#12 Re: Laravel 3 » Как это можно реализовать? » 26.07.2013 21:32:29

  1. Если у тебя есть товар, а у него есть вариации, и товар хранится в таблице — логично создать вторую и хранить там только вариации. Либо сделать поле в первой и держать вариации там (serialize() и пр.), но тогда по ним нельзя будет выполнять запросы.

Еще один глупый вопрос:
Есть фильтр например:

  1. Керамика.
  2. Мозайка
  3. Стеклянная мозайка

Дальше идут производители

  1. Производитель 1
  2. Производитель 2

В каждом из производителей может находиться несколько типов продукции, а может только одна. Все было бы просто, но я не хочу выводить всех производителей. Я хочу сделать чтобы по нажатию керамика выходили только производители содержащие керамическую продукцию. Пробовал по разному. Например в таблице с продукцией создавал type_id и manufacturers_id. По нажатию на фильтр проверялся type_id, а вот дальше трудности. Этот прием видимо не верен. Так же как и прием с созданием отдельной таблицы с type_id — пробовал.

#13 Re: Laravel 3 » Как это можно реализовать? » 26.07.2013 17:20:20

Proger_XP пишет:

}%Таблица с товарами (id, name, image, ...) и таблица с товарами по форматам (product_id, format_id, ...). В чём вопрос?

Не понял. 3 таблицы что ли создавать нужно?

#14 Laravel 3 » Как это можно реализовать? » 26.07.2013 15:47:34

umarov
Ответов: 18

Допустим имеется товар, а у него могут быть форматы 80х90, 90х30. У каждого товара может быть разное кол-во форматов и их может быть несколько. Как такое сделать так и не додумался. А возможно ли все занести в одну Mysql ячейку и потом как-то её расфасовать?

Пробовал запрос такого вида

INSERT INTO `products`(`formats`) VALUES ([value-1]),([value-2]);

Он создает 2 новые строки значит не подойдет.

Так ну можно сделать так:
Привязку по id опять же и в отдельную таблицу заносить все форматы соответствующего товара. Ну тогда нужно сделать дофигища ячеек на всякий случай ведь я не знаю точного кол-во форматов.

#15 Re: Laravel 3 » Как передать изображение в ссылку Blade » 24.07.2013 17:10:30

Artdevue пишет:

А вот если не нашли или не поняли, при этом указав, вот нашол или не нашол, помогите...
А так - считаю тупые вопросы задаются. Извините. если обидел кого.

Искал, но не так как нужно видимо

#16 Re: Laravel 3 » Как передать изображение в ссылку Blade » 24.07.2013 17:09:17

Artdevue пишет:

https://github.com/laravel/laravel/issues/1297
Я бы создал свой Хелпер и написал там свою функцию.

HTML::decode(HTML::link('#', HTML::image('img/file.jpg')));

спасибо помогло

#17 Re: Laravel 3 » Как передать изображение в ссылку Blade » 24.07.2013 17:03:25

Proger_XP пишет:

}%Используй, пожалуйста, - я за тобой уже три поста правил.

извини не знал. А на мой вопрос не ответишь?

#18 Re: Laravel 3 » Как передать изображение в ссылку Blade » 24.07.2013 16:14:32

вернее получается

<a href="http://primo()ru/collection/1">
<img src="http://primo()ru/images/manufacturers/ABK.jpg" alt="ABK">
</a>

вот так выглядит но отображается как текст

#19 Laravel 3 » Как передать изображение в ссылку Blade » 24.07.2013 16:13:26

umarov
Ответов: 11
{{ HTML::link("collection/$mfc->id",HTML::image("images/manufacturers/$mfc->logo", $mfc->title)) }}

так не получается

#20 Laravel 3 » Хранение товара в сессии » 24.07.2013 12:25:19

umarov
Ответов: 1

Хочу корзину сделать на сессиях.
сессии ведь на сервере хранятся.
Для каждого покупателя генерируется новая сессия?

#21 Laravel 3 » Зависимости от 2 таблиц » 23.07.2013 20:39:21

umarov
Ответов: 1

Допустим имеем таблицу "Производители", "Типы", "Продуцкия". Продукция зависит от производителей и типов потому-что на сайте предусмотрен поиск по ним. Не буду вдоваться в подробности а сразу спрошу прокатит ли такое:

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");
      }
}

Если такой вариант не прокатит как быть?

#22 Laravel 3 » Передача массива в БД » 22.07.2013 16:03:07

umarov
Ответов: 2

Возможно ли передать сразу несколько строк в базу данных с помощью массива скажем?

#23 Laravel 3 » Папка public » 22.07.2013 15:13:02

umarov
Ответов: 1

Не могу вспомнить как удалить папку public из проекта. Из основного урл убрал с помощью htaccess а вот такие все равно генерируются /public/type/1. В документации нечего не понял

#24 Laravel 4 » Не могу настроить Laravel 4 » 22.07.2013 12:21:45

umarov
Ответов: 1

Ошибка в следующем

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

#25 Re: Laravel 3 » Вывод значение из бд в value input'а » 14.02.2013 19:21:30

Моя ошибка неправильно вписывал поля из бд. Извиите. Прогер спасибо!

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