15.03.2018, 19:27
|
Аспирант
|
|
Регистрация: 01.02.2018
Сообщений: 33
|
|
Сообщение от j0hnik
|
Nexus,
echo $cmodels[$row]["ТТХ1"]; echo $cmodels[$row]["ТТХ2"]; echo $cmodels[$row]["ТТХ3"];
echo $cmodels[$row]["ТТХ4"]; echo $cmodels[$row]["ТТХ5"]; echo $cmodels[$row]["ТТХ6"];
echo $cmodels[$row]["ТТХ7"]; echo $cmodels[$row]["ТТХ8"]; echo $cmodels[$row]["ТТХ9"];
echo $cmodels[$row]["ТТХ10"]; echo $cmodels[$row]["ТТХ11"]; echo $cmodels[$row]["ТТХ12"];
echo $cmodels[$row]["ТТХ13"]; echo $cmodels[$row]["ТТХ14"]; echo $cmodels[$row]["ТТХ15"];
echo $cmodels[$row]["ТТХ16"]; echo $cmodels[$row]["ТТХ17"]; echo $cmodels[$row]["ТТХ18"];
echo $cmodels[$row]["ТТХ19"]; echo $cmodels[$row]["ТТХ20"]; echo $cmodels[$row]["ТТХ21"];
echo $cmodels[$row]["ТТХ22"];
Я вот про это. Тут явно повторяющийся код.
|
Как я говорил я пока ещё полный нуб, так что код кривой, но на данный момент это хотя бы какое то решение задачи. Я вообще хотел решить через JS, но понятного мне ответа не получил, разрулил как смог. Скинул на тот случай если ктото будет биться головой об стол над подобной задачкой.
|
|
15.03.2018, 19:34
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Mikael86
|
Скинул на тот случай если ктото будет биться головой об стол над подобной задачкой.
|
Чтобы не биться головой о твердые предметы так поступать как вы сделали как раз и не стоит. Ваша проблема в именовании массива данных, отсюда и такие портянки кода.
|
|
17.03.2018, 01:11
|
Аспирант
|
|
Регистрация: 01.02.2018
Сообщений: 33
|
|
Сообщение от laimas
|
Чтобы не биться головой о твердые предметы так поступать как вы сделали как раз и не стоит. Ваша проблема в именовании массива данных, отсюда и такие портянки кода.
|
Не спорю, тогда подскажите как вывести его правильно с учётом того что есть
Имя товара - заголовок,
Изображение товара,
Описание - абзац,
Цена - абзац или заголовок.
И какое то количество характеристик которые являются элементами списка и их количество в зависимости от компоновки и наименования товара меняеться.
И всё это надо продублировать во всплывающем окне и форме обратной связи скрытыми строками.
В данный момент я этого добился, но к сожалению только такой портянкой. В Гугле понятных мне примеров с такой раскладкой не нашёл, или не понял их по причине абсолютной неопытности
|
|
17.03.2018, 06:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Mikael86
|
И всё это надо продублировать во всплывающем окне и форме обратной связи скрытыми строками.
|
Во-первых - нет никаких всплывающих окон в вашем случае, все это в общем-то бред или мягко сказать "вольная трактовка" поведения обычного слоя на странице. Существует всего два модальных диалога которые действительно могут представлять и формы, и табличные данные, но эти диалоги поддерживаются только IE.
Во-вторых - визуализация табличных данных на странице клиента никак не может определять их структуру. А вот представление их на клиенте, а тем более в форме, может быть любым. РНР может за вас упаковать ее поля в массив такой, какой будет удобен для обработки на сервере, и только это будет определяющим, а не потому что всплывает или еще что либо.
Писать о заголовке, описании, цене (цена между прочим не может иметь ни абзаца, ни заголовка, цена это вещественная характеристика сущности, и имеет непосредственно величину и денежный номинал), и других характеристиках, но при этом все это описывать как ТТХ1, ТТХ2, ..., это и есть кошмар для любого языка программирования.
Архитектура данных и принципы нормализации, это будет определять структуру табличных данных, а не окна, формы и прочее. И в такой структуре как товары и их характеристики будет всегда первичная таблица описывающая основные характеристики товара, и вторичная таблица (вторичные таблицы) описывающая значения (набор) какой либо характеристики.
Эти характеристики имеют, должны иметь, "осязаемые" имена и связываться между собой уникальными идентификаторами - name, price, unit, weight, ... для каждого из товаров с его id. И эти имена на сервере будут ключами ассоциативного массива с первичным ключом id, указывающем какому товару принадлежит каждый из наборов массива. А на клиенте, это будут имена свойств объекта.
А вернуть эти данные серверу будет означать - связать эти свойства по id товара как индексу ключей name, price, unit, weight, ... или name, price, unit, weight, ... это будет вложенный массив под первичным ключом, индексом которого будет id. А не ТТХ1, ТТХ2, ..., и подобное, ибо это и есть корень зла в вашем и представлении, и, соответственно, обработке таких данных "костылями".
Последний раз редактировалось laimas, 17.03.2018 в 06:34.
|
|
17.03.2018, 13:21
|
Аспирант
|
|
Регистрация: 01.02.2018
Сообщений: 33
|
|
Сообщение от laimas
|
Во-первых - нет никаких всплывающих окон в вашем случае, все это в общем-то бред или мягко сказать "вольная трактовка" поведения обычного слоя на странице. Существует всего два модальных диалога которые действительно могут представлять и формы, и табличные данные, но эти диалоги поддерживаются только IE.
Во-вторых - визуализация табличных данных на странице клиента никак не может определять их структуру. А вот представление их на клиенте, а тем более в форме, может быть любым. РНР может за вас упаковать ее поля в массив такой, какой будет удобен для обработки на сервере, и только это будет определяющим, а не потому что всплывает или еще что либо.
Писать о заголовке, описании, цене (цена между прочим не может иметь ни абзаца, ни заголовка, цена это вещественная характеристика сущности, и имеет непосредственно величину и денежный номинал), и других характеристиках, но при этом все это описывать как ТТХ1, ТТХ2, ..., это и есть кошмар для любого языка программирования.
Архитектура данных и принципы нормализации, это будет определять структуру табличных данных, а не окна, формы и прочее. И в такой структуре как товары и их характеристики будет всегда первичная таблица описывающая основные характеристики товара, и вторичная таблица (вторичные таблицы) описывающая значения (набор) какой либо характеристики.
Эти характеристики имеют, должны иметь, "осязаемые" имена и связываться между собой уникальными идентификаторами - name, price, unit, weight, ... для каждого из товаров с его id. И эти имена на сервере будут ключами ассоциативного массива с первичным ключом id, указывающем какому товару принадлежит каждый из наборов массива. А на клиенте, это будут имена свойств объекта.
А вернуть эти данные серверу будет означать - связать эти свойства по id товара как индексу ключей name, price, unit, weight, ... или name, price, unit, weight, ... это будет вложенный массив под первичным ключом, индексом которого будет id. А не ТТХ1, ТТХ2, ..., и подобное, ибо это и есть корень зла в вашем и представлении, и, соответственно, обработке таких данных "костылями".
|
1е Ну я даже хз как можно назвать окно которое появляеться при нажатии на кнопку, подобный результат я увидел только когда загуглил "как сделать всплывающее окно на сайте".
2е Как вы предлагаете мне стандартизировать характеристики электро-оборудования например, когда для магнитного пускателя мне надо вывести максимальный ток силовых контактов, напряжение срабатывания, количество дополнительных контактов, для автоматического выключателя, ток срабатывания, кривую срабатывания, количество полюсов, а для микропроцессорного контроллера надо прописать количество модулей с аналоговыми и дискретными входами и выходами, количество контактов в них, рабочее напряжение, все показатели аналоговых входов и выходов?
Лично мне кажеться что будет проще вписать в массив характеристику и вывести её как ТХ(техническая характеристика)1, а не прописывать каждое значение поимённо.
3е Я примерно понимаю что что вы имеете ввиду описывая построение структуры, но проблемма в том что я не знаю как это прописать кодом, потому и попросил подсказать как это сделать или ссылку на решение подобной задачи, чтоб было на чём основываться перестраивая её под себя.
4е по поводу цены, чтоб её стилизовать её надо обернуть в какой то тег с каким то классом и прописать для неё CSS, а будет это заголовок <h>Цена</h> или абзац <p>Цена</p> мне в принципе всё равно. Вчера в 2 ночи решение которое меня устраивает уже нашёл, ток думал что тут будет быстрее получить подсказку от гуру, но в любом случае спасибо за советы, будет что почитать и обдумать.
Последний раз редактировалось Mikael86, 17.03.2018 в 13:49.
|
|
17.03.2018, 13:24
|
Аспирант
|
|
Регистрация: 01.02.2018
Сообщений: 33
|
|
Кстати решил отказаться от вывода по ключам и foreach в пользу for, и сократил обработчик до такого вида, таким образом сохранился вывод инфы на странице, в блоке всплывающем по клике на кнопку "Заказать" и отправка скрытых данных в почтовой форме.
<?php for ($row = 4; $row < 10; $row++) {
echo '<hr/>';
echo '<div class="row"><div class="col-1"></div>';
echo '<div class="col-10">';
echo '<center>'.'<h5>'.$cmodels[$row][1].'</h5>'.'</center>';
echo '</div><div class="col-1"></div>';
echo '<div class="col-12">';
echo '<ul>'.'<img class="RightImg40" src="'.$cmodels[$row][2].'">';
for ($col = 3; $col < count($cmodels[$row]); $col++) {
echo "<li>".$cmodels[$row][$col]."</li>";}
echo '</ul>';
echo '<a class="BuyButton popup-with-zoom-anim Red" href="#'.$cmodels[$row][0].'">Заказать</a>';
echo '</div></div>';
echo '<hr/>';
echo '<div id="'.$cmodels[$row][0].'" class="popup-window zoom-anim-dialog mfp-hide">' ;
echo '<center><h4>'.$cmodels[$row][1].'</h4></center>';
echo '<ul>'.'<img class="RightImg30" src="'.$cmodels[$row][2].'">';
for ($col = 3; $col < count($cmodels[$row]); $col++) {
echo "<li>".$cmodels[$row][$col]."</li>";}
echo '</ul>';
echo '<div class="SeparateRow"></div>';
echo '<form id="form'.$cmodels[$row][0].'">';
echo '<div class="row">';
echo '<div class="col-sm-12 col-lg-4"><input type="text" class="name" name="name" placeholder="Ваше имя"></div>';
echo '<div class="col-sm-12 col-lg-4"><input type="text" class="phone" name="phone" placeholder="Ваш телефон"></div>';
echo '<div class="col-sm-12 col-lg-4"><input type="text" class="email" name="email" placeholder="Ваш Email">';
echo '<button class="btn-default" name="submit" type="submit" style="float:right">Отправить</button>';
echo '</div></div>';
echo '<input type="hidden" name="formData" value="Заказать">';
echo '<input type="hidden" name="formName" value="'.$cmodels[$row][1].'">';
for ($col = 3; $col < count($cmodels[$row]); $col++) {
echo '<input type="hidden" name="formTX'.$col.'" value="'.$cmodels[$row][$col].'">';}
echo '</form>';
echo '</div>';
}
|
|
17.03.2018, 15:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Mikael86
|
Как вы предлагаете мне стандартизировать характеристики электро-оборудования например
|
СУБД не занимается стандартизацией, она описывает данные, их структуру, связи и т.д. Хотите понять как все это делается, читайте о реляционных базах данных и принципах нормализации их.
Допустим мы хотим иметь базу данных городов, их улиц и характеристику этих улиц. Что будет первично а данной структуре данных - курица или яйцо? Конечно курица, то есть город, ибо улицы в городе, а не наоборот. Значит первичная таблица, это таблица:
cities с двумя полями: id_city - уникальный идентификатор города, формируемый автоматически и являющийся первичным ключом таблицы, и city_name - название города. Таблица имеет значения:
1, Кукуево
2, Гадюкино
Связанные с первичной таблицей таблицы, это:
streets - таблица улиц с полями: id_street - уникальный идентификатор улицы, формируемый автоматически и являющийся первичным ключом таблицы, и street_name - название улицы, id_surface - характеристика дорожного покрытия улицы, id_lighting - характеристика освещения улицы. Таблица имеет значения:
1, Прямая, 1, 3
2, Кривая, 2, 1
3, Элитная, 4, 4
surfaces - таблица различных дорожных покрытий с полями: id_surface - уникальный идентификатор характеристики, формируемый автоматически и являющийся первичным ключом таблицы, surface_value - значение характеристики. Таблица имеет значения:
1, Грязь
2, Песок
3, Гравий
4, Асфальт
lightings - таблица различных дорожных покрытий с полями: id_lighting - уникальный идентификатор характеристики, формируемый автоматически и являющийся первичным ключом таблицы, lighting_value - значение характеристики. Таблица имеет значения:
1, Лампады
2, Свечи
3, Костры
4, Фонари электрические
Если нужно узнать удобно ли гулять в сандалиях по улице Прямой, достаточно сделать запрос к таблице streets объединив его с запросом к таблицам surface и lighting объединив их по идентификаторам id_surface и id_lighting для улицы id_street = 1. Результатом будет: Прямая, Грязь, Костры.
А вот улицы для города уже так не объединить, ибо в городе может быть множество улиц. Для такого объединения потребуется внешняя таблица связей - city_streets, с полями id_city и id_street. Если она будет содержать записи:
1, 1
1, 2
2, 3
значит у города Кукуево две улицы - Прямая и Кривая, а город Гадюкино, это город развитого коммунизма с одной Элитной улицей.
Если представить эти данные в форме как:
<input name="city[1]" value="Кукуево" />
<input name="street[1][1]" value="Прямая" />
<input name="surface[1][1][1]" value="Грязь" />
<input name="lighting[1][1][3]" value="Костры" />
<input name="street[1][2]" value="Кривая" />
<input name="lighting[1][2][2]" value="Песок" />
<input name="surface[1][2][1]" value="Лампады" />
<input name="city[2]" value="Гадюкино" />
<input name="street[2][3]" value="Элитная" />
<input name="surface[2][3][4]" value="Асфальт" />
<input name="lighting[2][3][4]" value="Фонари электрические" />
то сервер получит эти данные в виде массива:
Array
(
[city] => Array
(
[1] => Кукуево
[2] => Гадюкино
)
[street] => Array
(
[1] => Array
(
[1] => Прямая
[2] => Кривая
)
[2] => Array
(
[3] => Элитная
)
)
[surface] => Array
(
[1] => Array
(
[1] => Array
(
[1] => Грязь
)
[2] => Array
(
[1] => Лампады
)
)
[2] => Array
(
[3] => Array
(
[4] => Асфальт
)
)
)
[lighting] => Array
(
[1] => Array
(
[1] => Array
(
[3] => Костры
)
[2] => Array
(
[2] => Песок
)
)
[2] => Array
(
[3] => Array
(
[4] => Фонари электрические
)
)
)
)
в котором все вложенные массивы ключей города, улиц и их характеристик связаны по их идентификаторам. Северу легко такие данные проверить/обработать, и не важно сколько будет городов, улиц и характеристик.
А если данные в форме представить так:
<input name="data[1][city][name]" value="Кукуево" />
<input name="data[1][street][1][name]" value="Прямая" />
<input name="data[1][street][1][surface][1]" value="Грязь" />
<input name="data[1][street][1][lighting][3]" value="Костры" />
<input name="data[1][street][2][name]" value="Кривая" />
<input name="data[1][street][2][surface][2]" value="Песок" />
<input name="data[1][street][2][lighting][1]" value="Лампады" />
<input name="data[2][city][name]" value="Гадюкино" />
<input name="data[2][street][3][name]" value="Элитная" />
<input name="data[2][street][3][surface][4]" value="Асфальт" />
<input name="data[2][street][3][lighting][4]" value="Фонари электрические" />
то сервер получит уже такой массив:
Array
(
[data] => Array
(
[1] => Array
(
[city] => Array
(
[name] => Кукуево
)
[street] => Array
(
[1] => Array
(
[name] => Прямая
[surface] => Array
(
[1] => Грязь
)
[lighting] => Array
(
[3] => Костры
)
)
[2] => Array
(
[name] => Кривая
[surface] => Array
(
[2] => Песок
)
[lighting] => Array
(
[1] => Лампады
)
)
)
)
[2] => Array
(
[city] => Array
(
[name] => Гадюкино
)
[street] => Array
(
[3] => Array
(
[name] => Элитная
[surface] => Array
(
[4] => Асфальт
)
[lighting] => Array
(
[4] => Фонари электрические
)
)
)
)
)
)
А если все именовать так как у вас ХХХ1, ХХХ2, ..., то есть банально пронумеровать данные, то разобраться что есть что в большом массиве данных будет невозможно. Даже если иметь ключи city1, city2, ..., street1, street2, ..., то это все равно будет сущим кошмаром.
Не важно города ли с улицами описаны, товары ли, всегда должна быть связь между всеми данными сущности, которая однозначно указывает что чему принадлежит.
За один присест всего не рассказать, так что "Ок, Гугл, ...", находить, читать, вникать, учится мыслить.
|
|
17.03.2018, 16:57
|
Аспирант
|
|
Регистрация: 01.02.2018
Сообщений: 33
|
|
Спасибо за такое широкое раскрытие темы, буду гуглить читать вникать и учиться.
|
|
17.03.2018, 17:05
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Mikael86
|
решил отказаться от вывода по ключам и foreach в пользу for, и сократил обработчик до такого вида
|
И что получим на клиенте, N форм? А зачем?
|
|
17.03.2018, 17:45
|
Аспирант
|
|
Регистрация: 01.02.2018
Сообщений: 33
|
|
Сообщение от laimas
|
И что получим на клиенте, N форм? А зачем?
|
Некоторые характеристики используются по разу, нет смысла выдумывать им отдельное имя, достаточно просто вывести данные из массива в которых будет и ключ и значение. В данный момент решили добавить новые формы и страницы на сайт, потому для упрощения данные надо вывести в массив и автоматизировать работу. А форма связи будет нужна чтоб сделать пред.заказ, то-есть скинуть данные поставщику, он перезванивает, вносит поправки и уточнения, например наличие в помещении сети 380В, запланированную мощность, возможно уровень пожароопасности помещения, те нюансы о которых большинство обывателей даже не задумывается, но за которые можно отхватить не хилый штраф. Потому решили не делать обычную магазин-корзину, а реализовать так. Слишком много нюансов на изделиях, все учесть нереально, даже несмотря на то что я в смежной отрасли 8 лет работаю
|
|
|
|