Илья_2712
Всем привет!
Заранее прошу прощения за некорректно заданный вопрос, но перебрал кучу вариантов и не смог найти более подходящего))
Прошу помочь с решением моей задачи. Есть заголовок страницы товаров, который складывается из названия категории и выбранных атрибутов. Выбранные атрибуты зачастую не совсем логично отображаются. Мне нужно дополнить формулу — добавить условие для каких атрибутов прописать и название атрибута и значение атрибута, а для каких только значение атрибута.
Надеюсь понятно объяснил =)
Код, представленный ниже делает примерно следующий вид заголовка:
«Категория + Заголовок атрибута 1 (1 значение, 2 значение, …)», Заголовок атрибута 2 (1 значение, 2 значение, …)»:
Платья Пол (Для женщин), Застежка (С пуговицами), Цвет (Серый)PHP:
protected function formatAttributes($attributes) { $attributeStrings = []; /** @var FilterInterface $attribute */ foreach ($attributes as $attribute) { $attribute->init(); $items = $attribute->getActiveItems(); $names = array_column($items, ‘title’); } } }Мне нужен такой вид:
Платья для женщин с пуговицами цвет серыйЯ заметил, что если «getLabel» заменить на «init», то моя задача решается. Но тут подвох — не для всех атрибутов мне нужно удалить заголовки атрибута.
В итоге код должен быть примерно таким:
Если атрибут = Пол или Застежка, то не выводить заголовки атрибута, в остальных случаях выводить.Можете подсказать, Что-то я совсем не догоняю.
Drunkenmunky
Так и проверяйте значение атрибутов.
Например так:
https://www.php.net/manual/ru/function.in-array.php
Илья_2712
А можно для дЭбилов показать на примере в моем коде?)) Я сейчас только в начале изучения php и любая неправильно поставленная точка рушит мой код))
— Добавлено —Я предполагаю, что там должно быть что-то типа:
‘Пол’ => »;
‘Цвет’ => ‘цвет’;Но на этом мои познания всё, как говорится))
Drunkenmunky
Дайте пример входного массива и что из него должно получиться в итоге.
Посмотрим что можно сделать.
Илья_2712
Я предполагаю, что там должно быть что-то типа
Не совсем понял, что такое номер входного массива.
Но если все-таки понял, то вот:Категория «Платья» (Она выводится с помощью кода, т.к. если этот код удалить, остается только категория)
Атрибут 1 — «Пол». Значения «Для женщин», «Для мужчин»;
Атрибут 2 — «Застежка». Значения «С застежкой», «Без застежки»;
Атрибут 3 — «Цвет». Значения «Серый», «Бурый», «Малиновый».Так? =)
Должно получиться:
Если «Пол», то ничего не писать
Если «Застежка», то ничего не писать
Если «Цвет», то изменит на «цвет»
Для остальных оставить так, как есть первоначально.
Drunkenmunky
Нет. Вот так
PHP:
);
Илья_2712
Я не понимаю…
— Добавлено —Может быть так?))
Array (
‘Пол’ => ‘’,
‘Застежка’ => ‘’,
‘Цвет’ => ‘цвет’,
);
Илья_2712
Может быть так?))
Array (
‘Пол’ => ‘’,
‘Застежка’ => ‘’,
‘П’ => ‘’,
);Ну что, есть какие-то предположения, как можно это реализовать?
Drunkenmunky
PHP:
);Предположений масса.
Данных нет.
Илья_2712
И как же мне их дать? Где взять эти данные?))
Попробую вот так объяснить.
Drunkenmunky
Вот смотрите. Вы писали.
а теперь вы даете пример массива:
В нем ‘Пол’ и ‘Застежка’ ключи.
То есть не значения атрибута
Поэтому я вам дал шаблон массива, чтобы вы заполнили его своими ключами(атрибутами в вашей терминологии) и значениями.
Так же требуется пример (например массив или таблица и тд) вывода данных из этого массива.
Илья_2712
Попробую еще раз =)
PHP:
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):
$attributeStrings[] = $attribute->getLabel() . ‘ (‘ . implode(‘, ‘, $names) . ‘)’;замените
Код (Text):
$attribute->getLabel()на
Код (Text):
str_replace(‘Пол’, », $attribute->getLabel())