Я пытаюсь отобразить макет сетки HTML в файле php с именем Gardenshop.php. Внутри контейнера сетки должны находиться элементы сетки в виде карточек Bootstrap 5, которые создаются динамически. Контейнер сетки (a) имеет класс .items-wrapper.
На стороне MySQL я использую Sequelize с таблицей Treeseeds.
Я использую PDO (PHP) Data Object) в файле с именем shopconnect.php, чтобы установить соединение с моей базой данных и запросить данные обратно с помощью запросов выбора MySQL, как обычно.
//shopconnect.php
[*]
SPROUTY'S GARDENING SHOP
[url=./homepage.html][i][/i]Back To Homepage[/url]
[*][i][/i]
[/list]
Contains Stainless Steel: 
FSC (Forest Stewardship Council) certified: 
In Stock: 
In Stock: 
Weight (grams): 
Price: 
FSC (Forest Stewardship Council) certified: 
In Stock: 
Litres (Capacity): 
Price: 
In Stock: 
Soil Type: 
chalk
sand
loam
clay
Soil Acidity: 
acid
alkaline
neutral
Hardiness: 
hardy
tender
hardy/half-hardy
Price: 
In Stock: 
Is Biodegradable: 
Litres (Capacity): 
Price: 
Есть файл Gardenshop.css, который я включил с помощью тега в Gardenshop.php.
Я попробовал свой код, приведенный выше, через XAMMP (рендеринг php Gardenshop.php с использованием Apache)
Я получаю следующий результат на изображении ниже. Я хотел бы знать, как заставить карты начальной загрузки 5 динамически отображаться в сетке. Динамически в том смысле, что мне не нужно жестко кодировать элементы сетки; если я хочу добавить больше данных о семенах деревьев в свою базу данных, я могу это сделать, а затем, когда веб-страница Gardenshop.php будет загружена (через локальный хост в моем браузере), она автоматически отобразит правильное количество элементов сетки (карточек).
Изображение Gardenshop.php, когда я перехожу на локальный хост и конкретную страницу с помощью XAMPP](https://i.sstatic.net/0bk8E7lC.png)
Я пытаюсь отобразить макет сетки HTML в файле php с именем Gardenshop.php. Внутри контейнера сетки должны находиться элементы сетки в виде карточек Bootstrap 5, которые создаются динамически. Контейнер сетки (a) имеет класс .items-wrapper. На стороне MySQL я использую Sequelize с таблицей Treeseeds. Я использую PDO (PHP) Data Object) в файле с именем shopconnect.php, чтобы установить соединение с моей базой данных и запросить данные обратно с помощью запросов выбора MySQL, как обычно. //shopconnect.php [code]$host = "127.0.0.1"; $db = "database" $user = "user"; $pass = "password"; $charset = "utf8mb4";
$supplierIds = []; foreach($supplierNameData as $row1) { array_push($supplierIds,$row1["id"]); }
$supplierIdStrs = implode(',', $supplierIds);
$treeSeedQuery = "SELECT * FROM `treeseeds` WHERE supplierId in ($supplierIdStrs)"; $treeSeedDataOut = $pdo->query($treeSeedQuery);
$treeSeedArr = [];
do { $treeSeedArr = $treeSeedDataOut->fetchAll(); } while ($treeSeedDataOut->nextRowset() && $treeSeedDataOut->columnCount());
$domDoc = new DOMDocument();
function generateTreeCard(){ $topicDiv = $GLOBALS['domDoc']->createElement('div'); $topicDiv->setAttribute('class','tree-card'); //tree-card div is to be appended to the container mt-3 return $topicDiv; //USED IN LOOP BELOW }
function generateCardBody(){ $cardBody = $GLOBALS['domDoc']->createElement('div'); $cardBody->setAttribute('class','card-body'); return $cardBody; //DONE ALREADY APPENDED TO TREECARD BELOW IN THE LOOP }
function addheaderH4Text($value){ $cardTitle = $GLOBALS['domDoc']->createElement('h4',$value);body $cardTitle->setAttribute('class','card-title');//needs to be appended on to card body return $cardTitle; //ALREADY DONE IN THE LOOP BELOW }
function generateListElements($key,$value){ $resultItem = ""; switch($key){ case "commonName": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "speciesName": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "family": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "seedcostInclVAT": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "quantityInStock": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "seedNumberPerPack": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "colour": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "hardiness": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "soilType": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "soilAcidity": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; case "description": $resultItem = $GLOBALS['domDoc']->createElement('li',"$key : $value"); break; } return $resultItem; //needs to be appended to the productInfoList variable [list] }
***ISSUE IS IN THE NESTED FOREACH LOOP HERE **** foreach($treeSeedArr as $key => $value){ $infoParagraph = generateInfoText(); //Just to display "Information:" foreach($value as $key1 => $value1){ echo $key1 . " has a value of " . $value1 . " "; //***TEST if($key1 === 'commonName'){ $h4Text = addheaderH4Text($value1); //GENERATE h4 text line' $cardBody = generateCardBody()->appendChild($h4Text)->appendChild($infoParagraph); } if($key1 !== 'id' && $key1 !== 'treeImage1' && $key1 !== 'treeImage2' && $key1 !== 'treeImage3'){ $listElementResult = generateListElements($key1,$value1); // the bullet pointed list of properties $productInfoList->appendChild($listElementResult);//this is the tag } if($key1 === 'treeImage1' && !(is_null($value["treeImage1"]))){
if(array_key_exists("treeImage2",$value) && !(is_null($value["treeImage2"]))){ $imgCollectorArr["treeImage1"] = $value[$key1]; continue; //if a treeseed has more at least 2 images } $treeImage1 = generatetreeImage1($value1); //this is if a treeseed only has one image $treeCard = generateTreeCard()->appendChild($treeImage1)->appendChild($cardBody); }
if($key1 === 'treeImage2' && !(is_null($value["treeImage2"]))){ if(array_key_exists("treeImage3",$value) && !(is_null($value["treeImage3"]))){ $imgCollectorArr["treeImage2"] = $value[$key1]; continue; //if a treeseed has 3 images instead of 2 } //design what happens when there are 2 images $slideBox1 = $domDoc->createElement('div'); $slideBox1->setAttribute('class','mySlides fade'); $countText1 = $domDoc->createElement('div','1 / 2'); $countText1->setAttribute('class','numbertext'); $slideBox1->appendChild($countText1); $firstImg = $domDoc->createElement('img'); $firstImg->setAttribute('style','width:100%'); $firstImg->setAttribute('src',$imgCollectorArr["treeImage1"]); $slideBox1->appendChild($firstImg);
//attach on to treecard $previousLink = $domDoc->createElement('a','❮'); $previousLink->setAttribute('class','prev'); $previousLInk->setAttribute('onclick','plusSlides(-1)');
function showSlides(number){ let i; let slides = document.getElementsByClassName("mySlides"); let dots = document.getElementsByClassName("dot");
if(number > slides.length){ slideIndex = 1; }
if(number < 1){ slideIndex = slides.length; } for (i = 0; i < slides.length; i++) { slides[i].style.display = "none"; } for (i = 0; i < dots.length; i++) { dots[i].className = dots[i].className.replace(" active", ""); } slides[slideIndex-1].style.display = "block"; dots[slideIndex-1].className += " active";
}
function currentSlide(number){ displaySlides(slideIndex = number) }
[/code] Затем я импортирую приведенный выше файл JavaScript (slidelogic.js) и shopconnect.php в Gardenshop.php //gardenshop.php [code]
[*]
SPROUTY'S GARDENING SHOP
[url=./homepage.html][i][/i]Back To Homepage[/url] [*][i][/i] [/list]
Contains Stainless Steel:  FSC (Forest Stewardship Council) certified:  In Stock: 
In Stock:  Weight (grams):  Price:  FSC (Forest Stewardship Council) certified: 
In Stock:  Litres (Capacity):  Price: 
In Stock:  Soil Type:  chalk sand loam clay
Soil Acidity:  acid alkaline neutral
Hardiness:  hardy tender hardy/half-hardy
Price: 
In Stock:  Is Biodegradable:  Litres (Capacity):  Price: 
[/code] Есть файл Gardenshop.css, который я включил с помощью тега в Gardenshop.php. Я попробовал свой код, приведенный выше, через XAMMP (рендеринг php Gardenshop.php с использованием Apache) Я получаю следующий результат на изображении ниже. Я хотел бы знать, как заставить карты начальной загрузки 5 динамически отображаться в сетке. Динамически в том смысле, что мне не нужно жестко кодировать элементы сетки; если я хочу добавить больше данных о семенах деревьев в свою базу данных, я могу это сделать, а затем, когда веб-страница Gardenshop.php будет загружена (через локальный хост в моем браузере), она автоматически отобразит правильное количество элементов сетки (карточек). Изображение Gardenshop.php, когда я перехожу на локальный хост и конкретную страницу с помощью XAMPP](https://i.sstatic.net/0bk8E7lC.png)