WP, много переменных - выбрать правильное решение

123 4
J
На сайте с 21.08.2011
Offline
78
1840

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

Есть:

1. Custom Post Type "товар". Всего разных товаров 3000 штук. У каждого "товара" 30-40 Custom Post Fields.

2. Custom Post Type "составная часть товара, которая есть в каждом товаре". Всего разных 300 штук. У каждой "составной части товара" 20-30 Custom Post Fields.

3. У "товара" и "составной части товара" есть 3-4 Custom Post Fields, которые выводятся юзерам как на страницах "товаров", так и на страницах "составных частей товаров".

Легко сделать, но это очень неудобно и/или плохо:

Эти 3-4 Custom Post Fields - переменные и часто нуждаются в редактировании. Редактировать постоянно все "товары" и "составные части товара"? Жесть.

Можно на страницах с "товаром" делать запросы в базу данных (MySQL, естественно), но это - дикая нагрузка на сервер, так как, к примеру, есть страницы со списком из 300-400 товаров, и в каждом надо будет вывести 3-4 Custom Post Fields из нужных "составных частей товара".

Главный вопрос - че делать-то? :popcorn:

Вариант А:

Создаём файл often-needed-variables.php, в котором будем хранить и записывать эти 3-4 штуки часто нужных переменных.

Каждый раз при открытии страницы с какой-то "составной частью товара" кодом PHP происходит проверка на наличие переменной и её значения и, если "составная часть товара" новая или редактировалась, записываются в файл эти значения.

На страницах с "товарами" они оттуда парсятся.

Вариант Б:

Создаётся таблица в БД, куда пишутся эти 3-4 переменных.

1) как сделать так, чтобы они писались сразу, когда создаётся страница с "составной частью товара"?

2) опять же будет большая нагрузка на сервер (верно ведь?) при выводе, к примеру, на одной странице 300-400 "товаров", где у каждого надо вывести эти 3-4 переменных из разных "составных частей товаров".

Я понимаю, что всё выше написанное может взорвать мозг. :crazy::eek:

Если есть вопросы - поясню подробнее...:)

SeVlad
На сайте с 03.11.2008
Offline
1609
#1
Jovian:

3. У "товара" и "составной части товара" есть 3-4 Custom Post Fields, которые выводятся юзерам как на страницах "товаров", так и на страницах "составных частей товаров".

Т.е. дублируются в обоих кастомных типах? В стандартном случае - их надо заполнять и там и там?

Я правильно понял? Если так - вот тут как мне кацца и ошибка в проектировании.

А что представляют собой эти 3-4 метаполя (ака Custom Post Fields)? Какой содержимое?

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
J
На сайте с 21.08.2011
Offline
78
#2
SeVlad:
Т.е. дублируются в обоих кастомных типах? В стандартном случае - их надо заполнять и там и там?
Я правильно понял? Если так - вот тут как мне кацца и ошибка в проектировании.

Вот я и не хотел бы дублировать, а иметь эти поля только в "составных частях товаров", но выводить их (использовать) и на страницах с "товарами".

Загвоздка в том, что надо их выводить не только на самих страницах товаров (single page), но и на страницах с большим списком "товаров" (archive page и подобное). Здесь я упираюсь в слишком большую нагрузку на сервер (куча query из БД).

SeVlad:
А что представляют собой эти 3-4 метаполя (ака Custom Post Fields)? Какой содержимое?

Данные с цифрами. Некие Integers, которые надо будет не раз менять. Хотелось бы не менять их ручками по всему сайту, а только в Custom Post Types "составная часть товара", где они уникальны для каждого CPT.

Вот такая засада.

SeVlad
На сайте с 03.11.2008
Offline
1609
#3
Jovian:
а иметь эти поля только в "составных частях товаров", но выводить их (использовать) и на страницах с "товарами".

Погоди, "составная часть" - это уникальные данные для каждого "товара"? Т.е. в ед. экземпляре? Тогда зачем его в кастомные типы определять? ИМХО правильней в кастомную таксономию. Это же (если я правильно понимаю) иерархическая структура.

Или я не правильно понимаю?

---------- Добавлено 04.09.2013 в 16:49 ----------

Так.. перечитал.. переподумал. Вышесказанное отменяется ;)

А что если в п3 использовать просто метки? Ну или кастомную таксономию линейной иерархии (ну т.е. без иерархии.)

J
На сайте с 21.08.2011
Offline
78
#4

SeVlad, нет-нет.

"Составная часть товара" - именно его часть, но она может быть одинаковой в некоторых "товарах". Логическая часть. Карточка "товара" должна взять 3-4 переменных из карточки более подробного описания важной части этого "товара" - "составной части товара".

Поэтому "составных частей" всего 300 штук и в них куча своих Custom Fields (для описания более подробно этой важной части каждого "товара"), а самих "товаров" в 10 раз больше - 3000 штук.

Всё было бы легко, если не надобность выводить большой список "товаров", где пользователь должен видеть 3-4 переменных (Custom Post Fields) из "составных частей товара".

п.с.: если у меня уже крыша едет от этих "товаров", я не представляю, как вы сможете разобраться... :D Но очень приятно, что кто-то пытается вникнуть в суть моей проблемы, спасибо. ;)

SeVlad
На сайте с 03.11.2008
Offline
1609
#5
Jovian:
"Составная часть товара" - именно его часть, но она может быть одинаковой в некоторых "товарах"

Да, я это уже понял - след. постом написал, но он склеился с предыдущим :)

Мне кацца - метки (линейная таксономия) должно быть то, что надо. В см эти 3-4 общих для обеих типов делать не метаполями, а присваивать метки.

J
На сайте с 21.08.2011
Offline
78
#6
SeVlad:
Да, я это уже понял - след. постом написал, но он склеился с предыдущим :)

Мне кацца - метки (линейная таксономия) должно быть то, что надо. В см эти 3-4 общих для обеих типов делать не метаполями, а присваивать метки.

Костыль. Я не смогу спать нормально. :)

Более того, сей подход ограничит серьёзно масштабируемость и гибкость в будущем...

Хотя, вариант интересный - я о таком даже не подумал.;)

В идеале, я вижу использование некой отдельной таблицы в БД.

Но по какому принципу реализовать - не знаю.

Особенно мне не понятно, как заставить писать в эту таблицу данные каждый раз, когда я создаю/редактирую Custom Post type "составная часть товара".

Можно использовать отдельный php файл с переменными, но их там будет 1200 штук! 😮 Тоже костыль...

SeVlad
На сайте с 03.11.2008
Offline
1609
#7
Jovian:
Костыль

Метки - костыль? А мне кацца это именно верное решение. Для чего ж они ещё надо? :) Их суть - линейная иерархия. Ну т.е. "связать параллельные сущности одним термином\значением".

Хотя мб я до конца и не понимаю что и зачем, но на первый взгляд всё понятно.

А вот отдельные файлы - это точно костыли. :)

Jovian:
сей подход ограничит серьёзно масштабируемость и гибкость в будущем..

В чём же?

Jovian:
Но по какому принципу реализовать - не знаю.

Когда мне надо сообразить какую-то структуру, которая в мозгах не складывается - я пытаюсь это на бумаге изобразить. Связи, зависимости и тд. Да не сразу, но в основном после некоторого времени мучений настаёт просветление. Хотя признаю несколько раз мне так и не удалось разрулить систему (не ВП)

Так что попробуй порисовать - мб что и прояснится.

IL
На сайте с 20.04.2007
Offline
435
#8

Jovian, чего-то накрутил..

Jovian:
Каждый раз при открытии страницы с какой-то "составной частью товара" кодом PHP происходит проверка на наличие переменной и её значения и, если "составная часть товара" новая или редактировалась, записываются в файл эти значения.

Кэш лучше обновлять после редактирования (как вариант - после группового редактирования, если требуется обновлять много товаров). На событие повесить, в котором тип записи проверять.

А "штатные" плагины кэширования разве не затрагивают Custom Post Fields? В смысле, на генерацию разово уйдёт с десятка два лишних запросов.. а потом всё из кэша будет дёргать. Не айс, но может не так страшно?

В любом случае всегда остаётся вариант написать свою функцию, которая будет одним запросом все нужные (4штуки) custom fields для нужных id-шников получать и раскидывать по шаблону.

---------- Добавлено 04.09.2013 в 19:25 ----------

Jovian:
Особенно мне не понятно, как заставить писать в эту таблицу данные каждый раз, когда я создаю/редактирую Custom Post type "составная часть товара".

Штатными средствами http://codex.wordpress.org/Plugin_API/Action_Reference/save_post

Проверять на тип поста (вместо product_options название составной части товара)


// свой тип для "составной части товара
if ( 'product_options' != $_POST['post_type'] ) {
return;
}
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
SeVlad
На сайте с 03.11.2008
Offline
1609
#9
ivan-lev:
чего-то накрутил..

Как мне кацца проблема с логикой структуры.

Как я понимаю. Есть кастомный тип, скажем "велосипеды", есть кастомный тип "комплектующие".

"Велосипеды" содержит модели (основной контент) и их хар-ки (метаполя)

"Комплектующие" содержит комплектухи (основной контент) и их хар-ки (метаполя).

Одна и та же комплектующая "педаль" может быть у нескольких моделей велосипедов.

Ессно, одна модель велосипеда может иметь несколько комплектующих.

Т.е. тут имеем связь "многие ко многим" с параллельной и независимой иерархией.

Задача: добавить связующие хар-ки. (аля "красный", "железный", "надёжный").

Jovian, всё так?

Я вижу это как метки (или аналогичная линейная таксономия).

ЗЫ. И не надо изобретать велосипедов :)

J
На сайте с 21.08.2011
Offline
78
#10

Через часок обрисую проблему более подробно и в картинках (а то у нас недопонимание), так что не уходите - подумаем вместе ещё разок. ;)

123 4

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