Как и куда добавить условие IF в моем коде?

Илья_2712

Всем привет!

Заранее прошу прощения за некорректно заданный вопрос, но перебрал кучу вариантов и не смог найти более подходящего))

Прошу помочь с решением моей задачи. Есть заголовок страницы товаров, который складывается из названия категории и выбранных атрибутов. Выбранные атрибуты зачастую не совсем логично отображаются. Мне нужно дополнить формулу — добавить условие для каких атрибутов прописать и название атрибута и значение атрибута, а для каких только значение атрибута.

Надеюсь понятно объяснил =)

Код, представленный ниже делает примерно следующий вид заголовка:
«Категория + Заголовок атрибута 1 (1 значение, 2 значение, …)», Заголовок атрибута 2 (1 значение, 2 значение, …)»:
Платья Пол (Для женщин), Застежка (С пуговицами), Цвет (Серый)

PHP:
  1. protected function formatAttributes($attributes)
  2.     {
  3.         $attributeStrings = [];
  4.         /** @var FilterInterface $attribute */
  5.         foreach ($attributes as $attribute) {
  6.             $attribute->init();
  7.             $items = $attribute->getActiveItems();
  8.             $names = array_column($items, ‘title’);
  9.             if (count($names)) {
  10.                 $attributeStrings[] = $attribute->getLabel() . ‘ (‘ . implode(‘, ‘, $names) . ‘)’;
  11.  
  12.             }
  13.         }
  14.  
  15.         return implode(‘, ‘, $attributeStrings);
  16.     }

Мне нужен такой вид:
Платья для женщин с пуговицами цвет серый

Я заметил, что если «getLabel» заменить на «init», то моя задача решается. Но тут подвох — не для всех атрибутов мне нужно удалить заголовки атрибута.

В итоге код должен быть примерно таким:
Если атрибут = Пол или Застежка, то не выводить заголовки атрибута, в остальных случаях выводить.

Можете подсказать, Что-то я совсем не догоняю.

 

Drunkenmunky

Так и проверяйте значение атрибутов.
Например так:
https://www.php.net/manual/ru/function.in-array.php

 

Илья_2712

А можно для дЭбилов показать на примере в моем коде?)) Я сейчас только в начале изучения php и любая неправильно поставленная точка рушит мой код))
— Добавлено —

Я предполагаю, что там должно быть что-то типа:
‘Пол’ => »;
‘Цвет’ => ‘цвет’;

Но на этом мои познания всё, как говорится))

 

Drunkenmunky

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

 

Илья_2712

Я предполагаю, что там должно быть что-то типа

Не совсем понял, что такое номер входного массива.
Но если все-таки понял, то вот:

Категория «Платья» (Она выводится с помощью кода, т.к. если этот код удалить, остается только категория)
Атрибут 1 — «Пол». Значения «Для женщин», «Для мужчин»;
Атрибут 2 — «Застежка». Значения «С застежкой», «Без застежки»;
Атрибут 3 — «Цвет». Значения «Серый», «Бурый», «Малиновый».

Так? =)

Должно получиться:
Если «Пол», то ничего не писать
Если «Застежка», то ничего не писать
Если «Цвет», то изменит на «цвет»
Для остальных оставить так, как есть первоначально.

 

Drunkenmunky

Нет. Вот так

PHP:
  1. $array = array(
  2. array(‘colName1’ => ‘arg21’, ‘colName2’ => ‘arg22’, ‘colName3’ => ‘arg23’),
  3. array(‘colName1’ => ‘arg31’, ‘colName2’ => ‘arg32’, ‘colName3’ => ‘arg33’),
  4. array(‘colName1’ => ‘arg41’, ‘colName2’ => ‘arg42’, ‘colName3’ => ‘arg43’),
  5. array(‘colName1’ => ‘arg51’, ‘colName2’ => ‘arg52’, ‘colName3’ => ‘arg53’),
  6. array(‘colName1’ => ‘arg61’, ‘colName2’ => ‘arg62’, ‘colName3’ => ‘arg63’)
  7. );
 

Илья_2712

Я не понимаю…
— Добавлено —

Может быть так?))
Array (
‘Пол’ => ‘’,
‘Застежка’ => ‘’,
‘Цвет’ => ‘цвет’,
);

 

Илья_2712

Может быть так?))
Array (
‘Пол’ => ‘’,
‘Застежка’ => ‘’,
‘П’ => ‘’,
);

Ну что, есть какие-то предположения, как можно это реализовать?

 

Drunkenmunky

PHP:
  1. $array = array(                                              
  2. array(‘Пол’ => ‘arg21’, ‘Застежка’ => ‘arg22’, ‘П’ => ‘arg23’),
  3. array(‘Пол’ => ‘arg31’, ‘Застежка’ => ‘arg32’, ‘П’ => ‘arg33’),
  4. array(‘Пол’ => ‘arg41’, ‘Застежка’ => ‘arg42’, ‘П’ => ‘arg43’),
  5. array(‘Пол’ => ‘arg51’, ‘Застежка’ => ‘arg52’, ‘П’ => ‘arg53’),
  6. array(‘Пол’ => ‘arg61’, ‘Застежка’ => ‘arg62’, ‘П’ => ‘arg63’)
  7. );

Предположений масса.
Данных нет.

 

Илья_2712

И как же мне их дать? Где взять эти данные?))

Попробую вот так объяснить.

PHP:
  1. $array = array(
  2. array(‘Пол’ => », ‘Застежка’ => », ‘Цвет’ => ‘цвет’)
  3. );
 

Drunkenmunky

Вот смотрите. Вы писали.

а теперь вы даете пример массива:

PHP:
  1. $array = array(
  2. array(‘Пол’ => », ‘Застежка’ => », ‘Цвет’ => ‘цвет’)
  3. );

В нем ‘Пол’ и ‘Застежка’ ключи.
То есть не значения атрибута
Поэтому я вам дал шаблон массива, чтобы вы заполнили его своими ключами(атрибутами в вашей терминологии) и значениями.
Так же требуется пример (например массив или таблица и тд) вывода данных из этого массива.

 

Илья_2712

Попробую еще раз =)

PHP:
  1. $array = array(                                        
  2. array(‘Пол’ => ‘Для женщин’, ‘Для мужчин’, ‘Для девочек’, ‘Для мальчиков’),
  3. array(‘Застежка’ => ‘С застежкой’, ‘Без застежки’),
  4. array(‘Цвет’ => ‘Серый’, ‘Бурый’, ‘Малиновый’)
  5. );
 

Drunkenmunky

Хорошо, допустим.
Объясните тогда логику как, например, определять «Пол»?

 

Илья_2712

Как мне кажется, вся загвоздка в 10 строчке кода:
$attributeStrings[]=$attribute->getLabel()
Я так полагаю, что getLabel — это получение как раз имени атрибута. То есть (Пол — для женщин, для мужчин, для мальчиков, для девочек).
Я заменил getLabel на init, и вот что было:
с getLabel — Платья Пол (Для женщин)
с init — Платья (Для женщин)

Это то, что нужно (Скобочки эти я уберу, там все понятно). Но я не могу так сделать, потому что у некоторых атрибутов нужно оставить имя атрибута.

В своем изучении php я еще не дошел до объяснения такого рода конструкции и не понимаю, что она делает.

Но смысл такой, если этот лейбл=Пол, то Пол нужно удалить, если Возраст, то Возраст нужно удалить, для остальных оставить имя атрибута, таких как Цвет, Материал, Состав и т.д.

 

MouseZver

Тема для новичков, которые обуздали всемогущую силу основ программирования на PHP. Вы же — нет, а значит в раздел «сделай за меня», либо во «Фриланс»

 

Drunkenmunky

Не видя всей картины(то есть обрабатываемых данных, массива например) помочь вам не получится.
Замена «чего-то» на «что-то» не сработает.

 

Илья_2712

Почему тебя называют неадекватным пользователем?))) (В твоем профиле на стене увидел)
Ты если не знаешь или не хочешь помогать, то пройди, пожалуйста, мимо. Если я написал вопрос с просьбой помочь, значит я в чем-то не разобрался.
На этом форуме очень много лояльных пользователей, с которыми приятно пообщаться и вместе разобраться в теме. А есть такие, как ты троли, не понимаю, зачем вам это нужно?
— Добавлено —

Я честно, очень пытаюсь, понять, что нужно делать и что нужно дать для решения этой задачи)) Но не понимаю.

Возможно так получиться мне объясниться более подробно.
$attribute — это Атрибут, который состоит, как я понял из этого кода из двух переменных — Имени (Label) и Значений ($names).
А это код нужно дополнить, что если Label у attribute = Пол, то Label нужно заменить на пустое значение, в противном случае (Если Label не равно Пол), то оставить так, как есть. Значения атрибута всегда оставлять такими, какие они есть.

 

MouseZver

Тролли — пишется с двумя Л. Грамотей.

для тебя единственного оставил, чтобы начало текста читали. Как зомби ТВ.

если, да как бы, да почему, а за что — соплежуйством прекращай заниматься и покажи где ты хоть 1 бит кода написал.

Мне тоже много чего нужно, так в чем проблема то кроется ?

 

Илья_2712

Я честно, очень пытаюсь, понять, что нужно делать и что нужно дать для решения этой задачи)) Но не понимаю.

Возможно так получиться мне объясниться более подробно.
$attribute — это Атрибут, который состоит, как я понял из этого кода из Имени (Label) и Значений ($names).
А это код нужно дополнить, что если Label у attribute = Пол, то Label нужно заменить на пустое значение, в противном случае (Если Label не равно Пол), то оставить так, как есть.

Кажется я близок к решению =))
Но мне просто необходима помощь профессионала)

Вот что получается, если изучить код:
Например есть Товары со следующими характеристиками:
Категория — Платья
Атрибуты и значения:
Пол — Для женщин
Возраст — Для взрослых
Цвет — Серый

6 и 7 строчки в коде вызывают все активные атрибуты этих товаров
8 строчка говорит, что значения атрибутов это $name
10 строчка говорит как отображать эти атрибуты — название атрибута + значение атрибута.

Если в 10 строчке убрать $attribute->getLabel()., то название атрибута не выводится.

Итого получаем:
После 8 строчки нужно перезаписать названия атрибутов $attribute:
Пол = »
Возраст = »
Цвет = ‘цвет’

Только вот как это реализовать?)
— Добавлено —

Чё ты докопался то?
Проваливай отсюда и иди в других местах свои 5 копеек вставляй. С тобой неинтересно общаться и совсем бесполезно. А лучше удались с форума, обиженный.

 

Drunkenmunky

Хорошо.
Вот, что должно сработать, но так не делают
В этой строке

Код (Text):
  1. $attributeStrings[] = $attribute->getLabel() . ‘ (‘ . implode(‘, ‘, $names) . ‘)’;

замените

Код (Text):
  1. $attribute->getLabel()

на

Код (Text):
  1. str_replace(‘Пол’, », $attribute->getLabel())
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *