Златослав Десятников: Спасибо вам за ответы. Наводите на правильные мысли. Но не понимаю как и где хранить индекс (id) во время всех этих переходов по этапам оформления заказа, чтобы всегда знать куда записывать/откуда подтягивать данные. Самое значение созданной (при orders/create) id строки где хранить?
И еще такой вопрос - если человек вышел со страницы оформления заказа (например решил дополнить товаров в корзину) и начал заново оформлять заказ - дубликаты "черновых" заказов ведь будут появляться?
Т.е. каким образом, во-первых, знать на всех шагах 'id' созданной на первом этапе новой записи в бд (ведь на втором этапе мы же должны будем только дозаполнить заказ, а не создавать новую запись в таблице. И, во-вторых, как эти данные менять, в случае, если клиент вернулся на предыдущий этап (ведь ещё и, по-хорошему, нужно "подтянуть" уже введённые ранее данные).
Вася Петров:
Вы наверное не сталкивались с ситуацией когда в интернет-магазинах встречается ситуация когда товар принадлежит сразу нескольким разделам каталога.
Пример: магазин букетов цветов. Есуть категории 1ого и 2ого уровня.
1ого - быкуты из роз, букеты из тюльпанов, свадебные букеты. Товар "Букет из роз" может принадлежать не только каталогу букеты из роз, но и каталогу свадебные букеты. Здесь и начинаются дубли.
А теперь отвечаю на ваш вопрос:
1) Иерархия каталога. Если человек был в разделе Свадебные букеты выбрал какой-то букет из роз, то его не должно перекидывать в раздел "букеты из роз". Он должен оставаться в каталоге Свадебные букеты.
2) Уже ответил выше
Товар принадлежит сразу нескольким разделам каталога. Если человек ищет в одном, то после перехода на страницу товара иерархия должна сохраняться - это логично. Поэтому дублей не избежать.
301 редирект смысла не вижу - тоже самое, что и "не плодить дубли", но при этом хуже, а проблему с точки зрения сохранения дублей не решает.
Robots хуже каноникал.
jacob1237: спасибо вам ещё раз! Вы мне реально помогли)
По пунктам:
1) Посоветуете что-нибудь почитать на эту тему (не сталкивался раньше с HASH)?
2) Понял, разберу.
3) Уже слал)
4) ВОТ ПО пагинации - пожалуйста, подскажите как правильно реализовать пагинацию, если мне нужно будет потом прописать rel="canonical" ко всем страницам пагинации (я делаю seo-оптимизированный магазин)
zooks: Спасибо за помощь, но вопрос - если у меня страница товара доступна по нескольким url'ам, и я точно знаю по каким (не пропущу дубли) - все таки можно повесит rel=canonical?
Просто очень важна логика (приходится делать дубли), но при этом, конечно, очень важно SEO.
//Контроллер (то самое проблематичное место)
public function getProductOrSubcategory($categoryUrl, $productUrlOrSubcategoryUrl)
{
$category = Category::where([
['url', $categoryUrl],
['parent_id', null],
])->firstOrFail();
jacob1237: интересно, но все таки не понимаю - ведь есть интренет-магазины с таким роутингом (без .html). Почему это так трудно реализовать на laravel?)
jacob1237: subcategoryUrl и productUrl реально очень похожи, они отличаются лишь тем, что модель Product отличается от модели Category (которой в свою очередь принадлежит subcategory). Но на этапе роутинга я не понимаю как заставить их отличаться..
Странно, я почти уверен, что не первый эту проблему решаю. Почему нету решений подобного вопроса?!
Спасибо, вы мне очень помогли, все прочитал и разобрался!
Но у меня одна проблема - пожалуйста, объясните, что я делаю не так:
У меня есть такой роутинг:
//Здесь все ОК, выводятся товары по категории
Route::get('/{categoryUrl}', [
'uses' => 'ShopController@getCategory',
'as' => 'shop.category'
]);
//Здесь все ОК, выводятся товары по подкатегории
Route::get('/{categoryUrl}/{subcategoryUrl}', [
'uses' => 'ShopController@getCategoryAndSubcategory',
'as' => 'shop.categoryAndSubcategory'
]);
//Здесь все ПРОБЛЕМА, не выводится товар по категории (в ошибке видно, будто он запрос делает такого типа /{categoryUrl}/{subcategoryUrl})
Route::get('/{categoryUrl}/{productUrl}', [
'uses' => 'ShopController@getProductFromCategory',
'as' => 'shop.productFromCategory'
]);
//Здесь все ОК, выводится товар по подкатегории
Route::get('/{categoryUrl}/{subcategoryUrl}/{productUrl}', [
'uses' => 'ShopController@getProductFromSubcategory',
'as' => 'shop.productFromSubcategory'
]);
Спасибо за ваш ответ!
А теперь вопрос - как сюда вставить подкатегории?
Товары могут выводиться так:
1) {categoryID}/{subcategoryID}/{productID}
А могут и так:
2) {categoryID}/{productID} (то есть товар принадлежит не только подкатегории, но и категории верхнего уровня)
И еще такой вопрос - если человек вышел со страницы оформления заказа (например решил дополнить товаров в корзину) и начал заново оформлять заказ - дубликаты "черновых" заказов ведь будут появляться?