netcat? 10 netcatov
Например, такой адрес:
/mineralnye_veshhestva/page2/139-fosfor-v-organizme-cheloveka/
возвращяет 200. (урл получен добавлением ид 139 из скрина в 1 попавшийся адрес mineralnye_veshhestva/page2/67-fosfor-v-organizme-cheloveka/). Зачем page2😕
Изменив 1 сегмент УРЛа /vitaminy/page2/139-fosfor-v-organizme-cheloveka/ все равно 200, а если /vitarrrrrrminy/page2/139-fosfor-v-organizme-cheloveka/ (заведомо неверная категория) то 404. Т.е. наличие категории существующей в БД проверяется.
Из того, что у вас есть в таблице на скрине, не видно связи с категорией. А остальное для правильной генерации, например, каноникла или отдать 404 для невалидного УРЛА есть. Ид - 139, транслит поля title судя по всему. Осталось установить связь с категорией. Допускаю, что это невозможно.
12 это количество цифр после десятичной точки
Костыль
if(!function_exists('mysql_connect')&&function_exists('mysqli_connect')) { $link = null; define(MY_DB,"my_db"); function mysql_connect($server,$login,$pass){ $GLOBALS['link'] = mysqli_connect($server,$login,$pass, MY_DB); return $GLOBALS['link']; } function mysql_select_db(DBName) {return null;} function mysql_query ( $query, $link=null ){ if(!$link) $link = $GLOBALS['link']; return $link ? mysqli_query ( $link , $query , $resultmode = MYSQLI_STORE_RESULT ) : null; } /** И т.д. все используемые функции с префиксом mysql_ **/ }
sqlite, а что не так.
То, что закомментировано только лишь для информации что чего. На практике логика немного другая, что не принципиально. Урл с кириллицей вообще не пройдет (см. 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); } .....
Только не пойму смысл. Если вы хотите сказать, что поменяем название или рубрику и все, то на это.
Плюс в админке можно для любого объекта будь то плайн страница, объект каталога и т.д. вручную можно перепривязать объект из [pages].
Под вашу табличку некогда :( Максимум, что могу 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" ид существующих аналогов.
Пардон за картинки:)
Варианты:
$vendorId . $itemId; $vendorId . $name; $vendorId . $sku; $vendorId . $catId . $sku | $name | $itemId;
--- или
url (md5|crc от url) - считаю самым простым и лучшим, но каждый урл реально д.б. уникальным на вашем сайте. В случае смены урл, в таблице обвеса тоже надо изменить. Уполномоченный юзер (role=manager например) зашел залогиненным на документ, ткнул капу, залил фото/отредактировал текст/(....). По крону, таблица обвеса, чистится от того, чего уже нет на сайте.
Вы как то абстрактно. И так можно, и так.
Но, применительно к суровой реальности ВП vs криворукие самописатели, ваши буржуйские символы ни_о_чем. С какого бока к теме поста, доступ в зависимости от роли/аттрибута. Понятно что это будет так или иначе. Сомнительно, но можно и бинарный JSON, какая разница как хранить. Важно где хранить в ВП и как оттуда быстро добывать, при этом обезопасив себя от коллизий при обновлении прайса и от обновления ВП. И, вообще, есть ли тогда смысл в ВП, только для роутинга (гуру ВП помогите человеку), загрузки картинок, размещения десятка статичных страниц, отчетов вукомерса, м.б. платежей картой и еще там чего по мелочи. Коли мы все равно напишем 100500 строк кода и создадим x-таблиц/файлов для хранения данных (привет обновлениям ВП/плагинов).
Ну, например так:
Товар грузится на сайт как и было - ваша карточка на вашем сайте как есть сейчас
Разукрашиваем:
1) Кто то уполномоченный может добавить картинку, текстовый блок, изменить тайтл, дескрипшн и т.п. не трогая то что получено от поставщика ибо нет смысла - при следующем обновлении (загрузка csv,xls обмен 1с) все равно .... Банально и просто, но эффективно ибо ручная работа, если кто то не лентяй.
2) С этим товаром можно связать (установщик плагинов точно скажет как😂) и дополнительно показать в карточке (или еще что то сделать) например это
{{GalleryURL}}<br>{{Title}}
BELIF Rose Gemma Concentrate Oil 30ml Rose concentrate face oil
[GalleryURL] => *****thumbs3.ebaystatic.com/pict/2628576500228080_1.jpg [Title] => BELIF Rose Gemma Concentrate Oil 30ml Rose concentrate face oil .... [ItemSpecifics] => stdClass Object ( [NameValueList] => Array ( [0] => stdClass Object ( [Name] => Brand [Value] => Array ( [0] => Belif ) ) [1] => stdClass Object ( [Name] => Formulation [Value] => Array ( [0] => Oil ) ) [2] => stdClass Object ( [Name] => Target Area [Value] => Array ( [0] => Face ) ) [3] => stdClass Object ( [Name] => Skin Type [Value] => Array ( [0] => All Skin Types ) ) [4] => stdClass Object ( [Name] => Gender [Value] => Array ( [0] => Women ) ) ..... )
Все это берется тут, ну или тут а может вообще везде где дадут. Обратите внимание на ItemSpecifics , да и вообще вкусного в мире очень много☝
3) Фантазия, выбор ВП как лучшего мотора для вашего сайта способного воплотить любую фантазию😂 и пара десятков символов отправленных в гугл добавляют еще много способов сделать не "у всех все как у всех"
Ну и куда мы положим ItemSpecifics и остальное из 1 и 2 пункта в wp_posts или в wp_postmeta?
Вы видимо много сайтов заказываете. Я нет, но что другие предлагают иногда в курсе. Я таких, как вам попадаются, не видел. Что же, в каждой секте по паршивой овце, если все обстоит так, как у вас:(
Еще раз повторю. Если ТЗ на сайт можно выполнить установкой фри кмс + установка темы, плагина, то это лучшее решение. Даже посоветую такому заказчику, например визитки или "корпоративного". Ну такой, сайтец о компании и чтобы карта проезда была, новости и такой раздел куда зайдешь и ссылка скачать прайс 😎. Кстати именно ВП и посоветую: Находишь установщика темы, плагина (3-5т.р). Покупаешь подходящую платную тему 10-70$. Неделя и сайт готов☝ До свидания и не надо благодарить, рано😂
По поводу 1-страничника согласен, край SSI. С небольшими оговорками.
Только если просят. Но, в итоге да, именно уникальное для каждого. Одному надо чтобы для каждого раздела каталога можно было установить свой формат урл, свой шаблон для тайтла и др. мета-тегов, описания, шаблон вывода листинга категории, минимум 5 контентных блоков для вывода в разных частях страницы и чтобы для одной категории слайдер был вверху, а для другой после списка вариантов. И чтобы сам мог выбрать 4 варианта похожих товаров и сделать для них заголовки. А 5-й вариант чтобы автоматом подбирался для разных категорий по разным правилам. И плюс, эта, сделай чтобы мы какой то код ввели и сразу в этом месте кнопка нажав на которую форма возникала с разными вариантами обратной связи. Другой говорит, запарился менеджеров учить править в 1С и в админке сайта, а они меняются заразы раз в полгода, давай будет все из 1С. На каждый товар 3 набора картинок, чтобы 1-й справа сверху, а 2 и 3-й после таблицы характеристик, а еще рядом с каждым набором картинок соответствующий текст. Все приходит из 1С. Общая информация, установка, обслуживание. Нет 4, еще схемы надо при-ть. А давай неограниченно. Ну мало ли что мы потом придумаем. В итоге xpath и текстареа в админке для сохранения правил = {{supefoto}} в шаблоне карточки (тоже правится в админке). Что то типа цукцук-цукцукц-цукцукцук.jpg#supefoto , цукцук-33кцукц-цукцукцук.jpg#supefoto в import.xml, ну и ?mode=file&filename=цукцук-цукцукц-цукцукцук.jpg и т.д. естественно. Слайдер суперфото после обновления в указанном администратором месте карточки товара. Как то так.
И да, на серче нет моих заказчиков на разработку, если намек на то что я хочу кому то что то впарить. Тут больше статейник под адсенс, где, конечно, ВП вне конкуренции. Что не мое. Да и вообще, для незнакомых только as-is.
А вы видели мою кривую? Иначе зачем обобщать. Для тех кто в трусах повторю
См. выше.
Это пример, набросанный за 5 мин для иллюстрации. Функций которые надо было проверять не помню, нет смысла повторно код смотреть. Помню, что проверок того, что возвращает БД нет, как нет и проверки шаблона перед использованием. Но, не было такой задачи:). Кстати, неужто все разработчики под ВП без function_exists() не вызывают функции 🙄
Что касается.
То это, вполне норм. решение при определенных условиях. Где то - так, а где то например так:
CREATE TABLE [map]( [id] INTEGER PRIMARY KEY, VARCHAR(255) NOT NULL UNIQUE, [sort_order] INTEGER DEFAULT 99999999, [parent] INTEGER DEFAULT 0, [is_view] INTEGER(1) DEFAULT 0, [name] VARCHAR(127), [page_type] VARCHAR(32) DEFAULT 'plain', [type_id] VARCHAR(65), [add_time] DATETIME, [up_time] DATETIME DEFAULT CURRENT_TIMESTAMP, [tpl] VARCHAR(64));
Это вариант sqlite структуры сайта, где tpl может быть выбран для каждой страницы из доступных в системе шаблонов, а отображение осуществляется - если определен для любой ссылки в breadcrumb шаблон, то последний в ветке, а если нет - базовый
т.е., например определены для
/about/filials/ , /about/filials/usa/ , /about/filials/usa/la/
/about/mission/ будет показан в дефолтном шаблоне /about/filials/eu/paris/ будет показан в шаблоне определенном для /about/filials/ /about/filials/eu/berlin/ будет показан в шаблоне /about/filials/ /about/filials/usa/ny/ будет показан в шаблоне /about/filials/usa/ /about/filials/usa/bos/ будет показан в шаблоне /about/filials/usa/ /about/filials/usa/la/ будет показан в шаблоне /about/filials/usa/la/
Я вообще не против ВП, сайт визитка - однозначно ВП, магазин требуемый функционал которого укладывается в то, что дает Вукомерс - ради бога. Если, для того чтобы сделать сайт, есть инструмент, который позволяет практически все сделать используя только мышь и не выходя из админки, то глупо им не пользоваться. Но и делать из этого вывод, что все сайты надо на ВП, а то кругом криворукие самописатели, а для ВП 100500 млн квалифицированных установщиков плагинов и тем, я тоже бы не стал.
Мой пост всего лишь следствие того, что тоже умиляет уничижительное отношение поклонников ВП к самИписателям
Почему?
GET
https://newsroom.fb.com/news....................../ HTTP/2.0 200 OK 466мс
ВП ведь КМС из "коробки"? Или там контроль урла страницы созданной стандартными средствами ВП на установщике тем и плагинов лежит?
Может и так, а может умирает потому что "у всех все как у всех". Элементарный пример, каталог. Дай возможность для каждой категории свои шаблоны мета, описаний и т.д. Как правило что есть? Наименование, вендор, модель, параметры.
Тогда (примеры от балды, только для иллюстрации):
автокраны
урл /avtokran/{translit_model}_{translit_shassi}_{gruzopodemnost}_t /avtokran/ks45171_maz-55232_25_t
тайтл Продада автокранов {model} на шасси {shassi} производства {vendor} (Купить автокран КС45717 на шасси МАЗ-55232 производства Ивановский крановый завод)
и т.п. description, og, описание если пока нет рукотворного.
автомобили-манипуляторы
урл /kmu/{translit_vendor}-{translit_model}_s_manipulyatorom_{translit_model_kran} /kmu/kamaz-43118_s_manipulyatorom_inmam-im-150
тайтл Купить автомобиль {model}-{vendor} с манипулятором {model_kran} {kolesnaya_formula}, Г/п {gruzopodemnost} т, на вылете {min_vulet} м. (Купить автомобиль КАМАЗ-43118 с манипулятором ИНМАН ИМ-150 6х6, Г/п 8 т, на вылете 3 м.)