Vypis gallerii Get Request
- Tomas8698
- Člen | 109
Ahojte poradil by mi niekto ako fixnut aby mi zobrazovalo vsetky obrazky z galerie? Teraz to funguje iba pre jednu a mam obrazky aj v inych
$data = array( "Gallerie" => array(),"Obrázky" => array());
for ($i= 0;$i< count($galleries);$i++ ) {
$thisGalleryPath = basename($galleries[$i]);
$data["Gallerie"][$i]["path"] = $thisGalleryPath;
$data["Gallerie"][$i]["name"] = ucfirst($thisGalleryPath);
$thisGallery = glob($galleryFile . "/" . $thisGalleryPath . "/*.{jpg,png,gif}", GLOB_BRACE);
if ($thisGallery){
for ($e=0; $e < count($thisGallery); $e++){
$thisPath = basename($thisGallery[$e]);
$name= (ucfirst(basename($thisGallery[$e],".jpg")));
$modified = date ("Y-m-d H:i:s.", filemtime($thisGallery[$e]));
$data["Obrázky"][$e]["path"] = $thisPath;
$data["Obrázky"][$e]["fullpath"] = $thisGalleryPath."/".$thisPath;
$data["Obrázky"][$e]["name"] = $name;
$data["Obrázky"][$e]["modified"] = $modified;
}
}
Result:
{"Gallerie":[
{"path":"Name","name":"Name"},
{"path":"Nnames","name":"Nnames"}
,{"path":"name","name":"Name"}],
"Obrázky":[
{"path":"asds.jpg","fullpath":"name/asds.jpg","name":"Asds","modified":"2021-10-05 21:04:00."},{"path":"asdsa.jpg","fullpath":"name/asdsa.jpg","name":"Asdsa","modified":"2021-10-05 21:08:24."},{"path":"name.jpg","fullpath":"name/name.jpg","name":"Name","modified":"2021-10-05 19:42:59."},{"path":"stiahnuť.jpg","fullpath":"name/stiahnuť.jpg","name":"Stiahnuť","modified":"2021-10-06 16:22:15."}
]}
Editoval Tomas8698 (7. 10. 2021 22:12)
- Tomas8698
- Člen | 109
public function actionDefault(){
$dir = dirname(__DIR__ ,2);
$galleryFile = $dir.'/www/AllGalleries'; //Cesta k vsetkym galleriam
$galleries = glob($galleryFile."/*", GLOB_ONLYDIR);
if ($this->getHttpRequest()->isMethod('GET')){
$data = array( "Gallerie" => array(),"Obrázky" => array());
A dalo by sa to upravit tak, aby bola? :
"Galeria": [
{
"path":"Name",
"name":"Name"
},
// A tu by boli obrazky ku konkretnej galerii
"Obrázky":[{
"path":"asds.jpg",
"fullpath":"name/asds.jpg",
"name":"Asds",
"modified":"2021-10-05 21:04:00."
}
// Dalsia galleria
// Obrazky v tejto galerii
Editoval Tomas8698 (7. 10. 2021 22:46)
- Polki
- Člen | 553
Tak správně by to mělo být takto nějak:
config.neon:
parameters:
allGalleriesPath: %wwwDir%/AllGalleries
service:
- App\Model\GalleriesManager(allGalleriesPath: %allGalleriesPath%)
GalleriesManager.php:
<?php
declare(strict_types = 1);
namespace App\Model;
use Nette\SmartObject;
use Nette\Utils\DateTime;
use Nette\Utils\Finder;
use Nette\Utils\Json;
use SplFileInfo;
class GalleriesManager
{
use SmartObject;
public function __construct(
private string $allGalleriesPath,
) { }
private function findImagesInGallery(string $galleryPath): array
{
$retVal = [];
$images = Finder::findFiles('*')
->in($galleryPath);
foreach ($images as $imagePath => $imageInfo) {
assert($imageInfo instanceof SplFileInfo);
$retVal[] = [
'path' => $imageInfo->getFilename(),
'fullpath' => $imagePath,
'name' => $imageInfo->getBasename('.' . $imageInfo->getExtension()),
'modified' => DateTime::from($imageInfo->getMTime()), // případně přidat ->format()
];
}
return $retVal;
}
public function findAllGalleries(): array
{
$galleries = Finder::findDirectories('*')
->from($this->allGalleriesPath); // hledá do hloubky, tedy více úrovní adresářů... Případně si změň na ->in()
$retVal = [];
foreach ($galleries as $galleryPath => $galleryInfo) {
assert($galleryInfo instanceof SplFileInfo);
$retVal[] = [
'Galeria' => [
'path' => $galleryPath,
'name' => $galleryInfo->getBasename(),
],
'Obrázky' => $this->findImagesInGallery($galleryPath),
];
}
return $retVal;
}
public function findAllGalleriesInJson(): string
{
return Json::encode($this->findAllGalleries());
}
}
presenter:
class SomePresenter extends Presenter
{
#[Inject] public GalleriesManager $galleriesManager;
public function actionDefault(): void
{
$allGalleriesInRequiredArray = $this->galleriesManager->findAllGalleries();
$allGalleriesInRequiredJSONformat = $this->galleriesManager->findAllGalleriesInJson();
}
}
Alternativně můžeš ve finderu
použít ještě metodu find
, která vrátí oboje. Jak složky,
tak soubory.
- Tomas8698
- Člen | 109
Wau, super je lepšie keď je to oddelené v presenteri, ktorý to riesi. Krajšie to vyzerá 🙂
Ja si tie dáta posiela do JSON-U, dajú sa tam poslať obe aj galérie aj obrázky? Myslim spolocne do jedneho JSONU.
$this->sendJson($data)
A pomocou funkcie si vytiahneme data o danom subore ze
assert($galleryInfo instanceof SplFileInfo);
Editoval Tomas8698 (8. 10. 2021 8:49)
- Tomas8698
- Člen | 109
GalleriesManager
public function __construct(
private string $allGalleriesPath,
) { }
Mam otazku prečo GalleriesManager potrebuje constructor? :) ,ked ho zmazem
vypise error ze contructor tam nieje.
Alebo klasicky tam pridat $this->allGalleriesPath = $allGalleriesPath ?
Lebo ten $allGalleriesPath je z config.neon adresa foldera
Editoval Tomas8698 (8. 10. 2021 19:10)
- Polki
- Člen | 553
To v mém kódu jsou fičury
z PHP 8.0.
A konstruktor potřebuje na inject té cesty z configu
Editoval Polki (8. 10. 2021 19:51)