Что лучше: заказать у разработчиков сайт с нуля или использовать вордпресс?

MK
На сайте с 18.08.2005
Offline
126
#201
danforth:
Пусть я буду vendor = 1;
Покажите как вы его сохраните у себя, со всеми таблицами.

Под вашу табличку некогда :( Максимум, что могу ctrl-c , ctrl-v , prtsc и немного байт копирайта для пояснения..

А реализация может быть такой

табличка для обвеса 

CREATE TABLE [pages](
[id] VARCHAR(32) PRIMARY KEY ON CONFLICT ROLLBACK NOT NULL UNIQUE,
[data] text,
[uptime] DATETIME);
// id = strlen($url)>32 ? md5($url) : str::translit($url,'_', str::URL);
//$R = new Request sanitized url , post, get, headers, cook ....
//DB extends PDO , I() return $instanse[$key];
//$R->canUriId определяется по текущему урлу strlen($url)>32 ? md5($url) : str::translit($url,'_', str::URL); в зависимости от этого же ищутся данные из прайса...
//обвес

$c=DB::I(_SQLITE_ . 'p.db')->q('SELECT * FROM [pages] WHERE [id]=:id',[':id'=>$R->canUriId])->a();
print_r($c); die();
-----------
obves: Array
(
[id] => samosval/kamaz-65115
[data] => a:7:{s:5:"title";s:135:"SEO title, финальный, ручной работы, если нет, то используется сгенерированный";s:11:"description";s:141:"SEO description, финальный, ручной работы, если нет, то используется сгенерированный";s:7:"content";a:3:{i:1;a:2:{s:1:"c";s:50:"Lorem ipsum dolor sit amet, consectetur adipiscing";s:1:"t";s:16:"Описание";}i:2;a:2:{s:1:"c";s:51:"<h3>Второй контентный блок</h3>";s:1:"t";s:54:"Заголовок 2 контентного блока";}i:3;a:2:{s:1:"c";s:35:"<div class="owl-carousel">...</div>";s:1:"t";s:54:"Заголовок 3 контентного блока";}}s:4:"pics";a:4:{i:0;a:4:{s:5:"thumb";s:30:"/userdata/image/thumb_pic0.jpg";s:4:"path";s:24:"/userdata/image/pic0.jpg";s:3:"alt";s:22:"Alt картинки 0";s:11:"description";s:37:"Описание картинки {i}";}i:1;a:4:{s:5:"thumb";s:30:"/userdata/image/thumb_pic1.jpg";s:4:"path";s:24:"/userdata/image/pic1.jpg";s:3:"alt";s:22:"Alt картинки 1";s:11:"description";s:37:"Описание картинки {i}";}i:2;a:4:{s:5:"thumb";s:30:"/userdata/image/thumb_pic2.jpg";s:4:"path";s:24:"/userdata/image/pic2.jpg";s:3:"alt";s:22:"Alt картинки 2";s:11:"description";s:37:"Описание картинки {i}";}i:3;a:4:{s:5:"thumb";s:30:"/userdata/image/thumb_pic3.jpg";s:4:"path";s:24:"/userdata/image/pic3.jpg";s:3:"alt";s:22:"Alt картинки 3";s:11:"description";s:37:"Описание картинки {i}";}}s:6:"params";a:4:{s:24:"Мощность, л.с.";s:3:"300";s:33:"Вместимость т.б., л";s:3:"250";s:29:"Г/подъемность, т";s:2:"15";s:41:"Направление разгрузки";s:10:"назад";}s:7:"related";s:12:"231,21,16,34";s:4:"hits";s:12:"12,17,18,334";}
[uptime] => 2016-12-18 14:28:24
)

Проще на пальцах картинках: У пользователя, роль которого позволяет, несколько кнопок - галерея, контент, режим разметки прямо на фронте. Нажав на которые, можно привязать к урлу картинки, неограниченное кол-во текстовых блоков. Которые, потом можно перетащить куда угодно в рамках документа. Все это сохраняется в серилизованном массиве. Есть механизмы, которые, если меняется урл (перенос документа в другой раздел, прямое изменение урла), меняют ид в этой табличке (который и есть урл в сущности). Есть механизмы, которые удаляют данные несуществующих урл. Замена пары строк позволяет изменить логику того, что делать, если например товара по данному урлу нет - или 404 и die('content for 404') или 30х и location на предыдущий существующий документ в урле или 200 и показать то что нашлось в таблице обвеса для данного урл, добавив например в "related" ид существующих аналогов.

Пардон за картинки:)

jpg screen-1.jpg
jpg screen-2.jpg
jpg screen-3.jpg
jpg screen-4.jpg
нет
danforth
На сайте с 18.12.2015
Offline
153
#202

Marat_Kh, ну и код)) 😕

[id] VARCHAR(32) PRIMARY KEY ON CONFLICT ROLLBACK NOT NULL UNIQUE, 

id = strlen($url)>32 ? md5($url) : str::translit($url,'_', str::URL);

Данная конструкция шаткая. Объясняю: если символов меньше или равно 32, то вы транслитеризируете текст, очевидно на английский. Я конечно не знаю что там у вас за транслитеризация, но если она какая-то более вменяемая, то подав на вход url текст "Жирный жираф бежит через поле" на выход вы получите "zhirnyiy_zhiraf_bezhit_cherez_pole", что уже не вмещается в 32 символа VARCHAR(32), потому что их тут 34.

Да и в целом, вы мне скинули не то о чем я вас просил. Я вас просил о том, чтобы вы мне скинули таблицы: товары на сайте, описания, и как вы свяжете описания с товаром на сайте, при этом товары импортируются из прайса поставщика. Пример прайса из одного товара я вам дал выше. После чего мы с вами воспроизведем ситуацию, как сказал человек выше: удалим все товары и зальем заново, и посмотрим на то, как описания останутся прикреплены к товарам.

Junior Web Developer
B
На сайте с 13.02.2008
Offline
262
#203
danforth:
Вот вам прайс из одного товара.
Код:
id: 2047,
sku: "001-red",
name: "Чашка с обезьяной",
price: 199.99,
url: "store.ru/chashka-s-obezyanoy/"
Пусть я буду vendor = 1;
Покажите как вы его сохраните у себя, со всеми таблицами.

Я в виде полей запишу (не в SQL) для простоты.

ВАРИАНТ 1:

Дисплейный товар (display_product):

id: 123,

name: "Чашка с обезьяной",

url: "store.ru/chashka-s-obezyanoy/"

description: описание товара здесь...

Реальный товар (product):

id: 2047,

sku: "001-red",

name: "Чашка с обезьяной красная",

color: Красная

price: 199.99,

display_product_id: 123

-------------------

ВАРИАНТ2:

Реальный товар (product):

id: 2047,

sku: "001-red",

name: "Чашка с обезьяной",

price: 199.99,

url: "store.ru/chashka-s-obezyanoy/"

Описание товара (product_description):

id: 123

name: "Чашка с обезьяной",

url: "store.ru/chashka-s-obezyanoy/"

description: описание товара здесь...

-------------------

В первом варианте связь по display_product_id, а во втором варианте - по URL.

danforth
На сайте с 18.12.2015
Offline
153
#204

borisd, предположим, что на следующей неделе Новый год. Год обезьяны. Поставщик присылает новый прайс:

id: 2647,
sku: "ng-ch-10",
name: "Чашка новогодняя с рисунком обезьяны",
price: 199.99,
url: "store.ru/chashka-novogodnyaya-s-obezjanoy/"

В данной ситуации девочка просто создала новый товар потому что скоро новый год. А старый скрыла с витрины. Сама чашка - та же. И все. Реальная ситуация, где поставщики меняют артикулы как захотят и когда захотят. И объясняй ты им хоть ты тресни, что артикул создается раз, он должен быть уникальным, и не меняться на протяжении жизни товара. Они в артикул вообще могут "1" вписать. Привязываться к идентификаторам поставщиков нельзя. Вообще у меня реализована система, когда прайс импортируется, то все данные сохраняются во временную таблицу. Когда ты заходишь в импорт, там видно товар до, и товар после. И кнопки "Применить все" и "Применить выделенные". Даже после применения есть возможность откатиться назад. Потому что есть лог импортов. Но опять же, автоматизировать я это никогда не рискну, потому что часто косяки.

B
На сайте с 13.02.2008
Offline
262
#205
danforth:
В данной ситуации девочка просто создала новый товар потому что скоро новый год. А старый скрыла с витрины.

И страница выпала из индекса и из топа... если реальный товар сам является витриной.

danforth:
Сама чашка - та же

Если сама чашка по сути та же, а отличается мелочью, то не надо "эти те же самые" чашки плодить в виде множества одинаковых страниц-дублей, надо все эти чашки показывать в одной карточке товаров, тогда реальные товары можно тасовать как угодно и даже если в карточке не останется ни одного реального товара, страница останется в индексе и топе.

danforth:
Привязываться к идентификаторам поставщиков нельзя

Тогда надо свою привязку к своей системе идентификации так или иначе создавать. В противном случае не хорошо будет.

danforth:
Даже после применения есть возможность откатиться назад. Потому что есть лог импортов.

Лучше параллельным слоем товары накатить. Если всё нормально, новый слой активизировать, а старый слой удалить. Тогда всё бесшовно произойдет и без малейших задержек.

danforth:
Но опять же, автоматизировать я это никогда не рискну, потому что часто косяки.

А у меня в текущем проекте выхода нет, приходится импорт автоматизировать... Но я введу проверки, и если всё ОК, то новый слой активизируется, иначе потребуется ручная проверка и активизация.

MK
На сайте с 18.08.2005
Offline
126
#206
danforth:
Marat_Kh, ну и код)) 😕

sqlite, а что не так.

danforth:

Данная конструкция шаткая. Объясняю: если символов меньше или равно 32, то вы транслитеризируете текст, очевидно на английский. Я конечно не знаю что там у вас за транслитеризация, но если она какая-то более вменяемая, то подав на вход url текст "Жирный жираф бежит через поле" на выход вы получите "zhirnyiy_zhiraf_bezhit_cherez_pole", что уже не вмещается в 32 символа VARCHAR(32), потому что их тут 34.

Да и в целом, вы мне скинули не то о чем я вас просил. Я вас просил о том, чтобы вы мне скинули таблицы: товары на сайте, описания, и как вы свяжете описания с товаром на сайте, при этом товары импортируются из прайса поставщика. Пример прайса из одного товара я вам дал выше. После чего мы с вами воспроизведем ситуацию, как сказал человек выше: удалим все товары и зальем заново, и посмотрим на то, как описания останутся прикреплены к товарам.

То, что закомментировано только лишь для информации что чего. На практике логика немного другая, что не принципиально. Урл с кириллицей вообще не пройдет (см. str::testUrl). Надрал из исходника. Таблица обвеса - описаний в комментируемом вами посте. Ид в обоих таблицах одинаковый.

//Например такая таблица

CREATE TABLE [items](
[id] VARCHAR(32) PRIMARY KEY NOT NULL,
[visible] INTEGER(1) DEFAULT 0,
[name] VARCHAR(255),
[price] MONEY,
[hitprice] MONEY,
[hitdate] DATETIME,
[cat_id] VARCHAR(32),
[update] DATETIME,
[vendor] VARCHAR(127));

//загрузчик из xls
....
$name = str::sanitize($sheet->getCell($nf . $row)->getValue());
if($name) {
$a[$row][':name'] = $name;
$a[$row][':id'] = $cat_url . '/' . str::translit($a[$row][':name'], '_', str::URL );
if( strlen( $a[$row][':id']>32 ) ) {
$a[$row][':id'] = md5($a[$row][':id']);
}

....
$c=DB::I(_SQLITE_ . 'cat.db')->q('INSERT OR REPLACE INTO [items]
([id],[visible],[name],[price],[hitprice],[hitdate],[cat_id],[update],[vendor]) VALUES
(:id, :visible, :name, :price, :hitprice, :hitdate, :cat_id, :update, :vendor )',$a)->info();

//Class Request, url components
.....
if(!str::testUrl($components['path'])) aapp::error_out('wrongUrl', 'urlError in /' . $components['path']);;
......
//$this->URI['urls'] массив урлов /a/b/c/ => ['a','a/b','a/b/c']
$this->canUri = end($this->URI['urls']);
$this->canUriId = strlen($this->canUri) > 32 ? md5($this->canUri) : $this->canUri;
....

//Class str
.....
public static function testUrl($str) {
return preg_match("#^([a-zA-Z0-9\_\/\-\.])+$#", $str);
}
.....

Только не пойму смысл. Если вы хотите сказать, что поменяем название или рубрику и все, то на это.

мое:
Есть механизмы, которые, если меняется урл (перенос документа в другой раздел, прямое изменение урла), меняют ид в этой табличке (который и есть урл в сущности). Есть механизмы, которые удаляют данные несуществующих урл. Замена пары строк позволяет изменить логику того, что делать, если например товара по данному урлу нет - или 404 и die('content for 404') или 30х и location на предыдущий существующий документ в урле или 200 и показать то что нашлось в таблице обвеса для данного урл, добавив например в "related" ид существующих аналогов.

Плюс в админке можно для любого объекта будь то плайн страница, объект каталога и т.д. вручную можно перепривязать объект из [pages].

Романчук
На сайте с 29.11.2016
Offline
32
#207

В вашем случае идеально подойдет вордпресс. Это удобная платформа, есть достаточно много шаблонов, и наличие защиты от взломов тоже является преимуществом.

S
На сайте с 23.05.2004
Offline
315
#208
Романчук:
аличие защиты от взломов тоже является преимуществом.

Это пароль в админку сейчас защита от взломов ? :D

Это просто подпись.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий