<script type="text/javascript">
$(document).ready( function(){
var buttons = { previous:$('#lofslidecontent45 .lof-previous') ,
next:$('#lofslidecontent45 .lof-next') };
$obj = $('#lofslidecontent45').lofJSidernews( { interval : 4000,
direction : 'opacitys',
easing : 'easeOutBounce',
duration : 1200,
auto : true,
mainWidth : 980,
buttons : buttons} );
});
</script>
function getAllMainCategoriesWithChildren($parentId) {
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder
->select('f')
->from($this->getClassName(), 'f')
->where('f.parentId = :parentId')
->setParameter('parentId', $parentId)
->orderBy('f.main', 'ASC');
$categories = $queryBuilder->getQuery()->getResult();
foreach ($categories as $category)
{
$rsChildren = $this->ChildrenCategory($category->getMain());
if($rsChildren){
$category->children = $rsChildren;
}
}
return $categories;
}
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
/**
* Traits.
*/
use \Fork\Zend\ServiceManager\Traits\ServiceManagerAwareTrait;
use \Application\Service\Traits\AsutpServiceAwareTrait;
use \Application\Service\Traits\MenuServiceAwareTrait;
use \Application\Service\Traits\FotoServiceAwareTrait;
public function indexAction()
{
$menu = $this->getMenuService()->getMenu();
$viewModel = new ViewModel(['menu' => $menu]);
return $viewModel;
}
public function asutpAction()
{
$menuId = $this->params()->fromRoute('id', -1);
$foto = $this->getAsutpService()->getFotoByParentId($menuId);
$menu = $this->getMenuService()->getMenu();
$files = $this->getFotoService()->getSavedFiles();
/**$debugObject = $foto;
// $debugObject = array_keys($debugObject);
if (is_object($debugObject)) {
\Zend\Debug\Debug::dump(get_class_vars(get_class($debugObject)) + get_class_methods($debugObject), '<p style="color:blue">' . get_class($debugObject) . '</p>');
}
else {
\Zend\Debug\Debug::dump($debugObject);
}*/
$viewModel = new ViewModel(['foto' => $foto,
'menu' => $menu,
'files' => $files]);
return $viewModel;
}
$thumb = [];
foreach ($foto as $f)
{
$thumb[] = $f;
}
$this->miniFoto()->setThumb($thumb, $files);
echo $this->miniFoto()->render();
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
class Thumb extends AbstractHelper
{
/**
* Menu thumb array.
* @var array
*/
protected $thumb;
protected $files;
/**
* Constructor.
* @param array $thumb Thumb thumb.
*/
public function __construct($thumb=[], $files=[])
{
$this->thumb = $thumb;
$this->files = $files;
}
/**
* Sets thumb thumb.
* @param array $thumb Thumb thumb.
*/
public function setThumb($thumb)
{
$this->thumb = $thumb;
}
public function render()
{
if (count($this->thumb)==0)
return ''; // Do nothing if there are no items.
$result = '<div class="col-2">';
$result .= '<div class="row">';
$result .= '<div class="col">';
$result .= '<p class="text-center">Примеры реализованных проектов</p>';
$result .= '</div>';
$result .= '</div>';
// Визуализация элементов
foreach ($this->thumb as $item)
{
if (preg_match('/[a-z][0-9]+\.[png]+/i', $item['image'] ))
{
$result .= $this->renderItem($item);
}
}
$result .= '</div>';
return $result;
}
protected function renderItem($item)
{
$image = isset($item['image']) ? $item['image'] : '';
$foto = '';
foreach ($this->files as $file)
{
if ($image == $file)
{
$foto = $file;
}
}
var_dump($foto);
$result = '';
$escapeHtml = $this->getView()->plugin('escapeHtml');
$result .= '<div class="row">';
$result .= '<div class="col mb-1">';
$result .= '<img src="'.('application', ['action'=>'file'],
['query'=>['name'=>$escapeHtml($foto)], 'thumbnail'=>true]).'" alt="" class="d-block w-100" data-toggle="modal" data-target="#exampleModal">';
$result .= '</div>';
$result .= '</div>';
return $result;
}
}
<?php if ($product->getImage() == $file):?>
<?php
namespace Shop\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Shop\Entity\Category;
use Shop\Entity\Products;
use Zend\View\Model\ViewModel;
use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator as DoctrineAdapter;
use Doctrine\ORM\Tools\Pagination\Paginator as ORMPaginator;
use Zend\Paginator\Paginator;
class CategoryController extends AbstractActionController
{
/**
* Менеджер сущностей.
* @var Doctrine\ORM\EntityManager
*/
protected $entityManager;
/**
* Менеджер продуктов.
* @var Shop\Service\ProductManager
*/
protected $productManager;
// Метод конструктора, используемый для внедрения зависимостей в контроллер.
public function __construct($entityManager, $productManager)
{
$this->entityManager = $entityManager;
$this->productManager = $productManager;
}
public function indexAction()
{
$categories = $this->entityManager->getRepository(Category::class)
->getAllMainCatsWithChildren();
// Получаем ID категории.
$categoryId = $this->params()->fromRoute('id', -1);
// Находим существующую категорию в базе данных.
$cat = $this->entityManager->getRepository(Category::class)
->ChildrenCategory($categoryId);
if ($cat == null) {
$queries = $this->entityManager->getRepository(Products::class)
->getProductsById($categoryId);
} else {
$ids = [];
foreach ($cat as $c) {
$ids[] = $c->getId();
}
$queries = $this->entityManager->getRepository(Products::class)
->getProductsByCategoryIds($ids);
}
// Получаем список уже сохраненных файлов.
$files = $this->productManager->getSavedFiles();
$page = $this->params()->fromRoute('page', 1);
$adapter = new DoctrineAdapter(new ORMPaginator($queries, false));
$paginator = new Paginator($adapter);
$paginator->setDefaultItemCountPerPage(1);
$paginator->setCurrentPageNumber($page);
// Визуализируем шаблон представления.
return new ViewModel([
'categoryId' => $categoryId,
'categories' => $categories,
'products' => $paginator,
'files' => $files,
]);
}
public function fileAction()
{
// Получаем имя файла из GET-переменной.
$fileName = $this->params()->fromQuery('name', '');
// Проверяем, что нужно пользователю: изображение в полном размере или миниатюра.
$isThumbnail = (bool)$this->params()->fromQuery('thumbnail', false);
// Получаем путь к файлу изображения.
$fileName = $this->productManager->getImagePathByName($fileName);
if($isThumbnail) {
// Изменяем размер изображения.
$fileName = $this->productManager->resizeImage($fileName);
}
// Получаем информацию файла изображения (размер и MIME-тип).
$fileInfo = $this->productManager->getImageFileInfo($fileName);
if ($fileInfo===false) {
// Устанавливаем код состояния 404 Not Found
$this->getResponse()->setStatusCode(404);
return;
}
// Запсиываем HTTP-заголовки.
$response = $this->getResponse();
$headers = $response->getHeaders();
$headers->addHeaderLine("Content-type: " . $fileInfo['type']);
$headers->addHeaderLine("Content-length: " . $fileInfo['size']);
// Записываем содержимое файла.
$fileContent = $this->productManager->getImageFileContent($fileName);
if($fileContent!==false) {
$response->setContent($fileContent);
} else {
// Устанавливаем код состояния 500 Server Error.
$this->getResponse()->setStatusCode(500);
return;
}
if($isThumbnail) {
// Удаляем временный файл миниатюры изображения.
unlink($fileName);
}
// Возвращаем экземпляр Response, чтобы избежать визуализации представления по умолчанию.
return $this->getResponse();
}
}
'may_terminate' => true,
'child_routes' => [
/** Configuration of the 'shop/category' routes. */
'category' => [
'type' => 'Literal',
'options' => [
'route' => 'category/',
'defaults' => [
'controller' => Controller\CategoryController::class,
'action' => 'index',
],
],
литеральный, не получается запустить fileaction, у меня уже было такое и мне пришлось переделать его в сегмент, правда у меня после него не было дочерних маршрутов. public function indexAction()
{
// Создаем меню
$categories = $this->entityManager->getRepository(Category::class)
->getAllMainCatsWithChildren();
// Получаем ID категории.
$categoryId = $this->params()->fromRoute('id', -1);
// Находим существующую категорию в базе данных.
$cat = $this->entityManager->getRepository(Category::class)
->ChildrenCategory($categoryId);
if ($cat == null) {
$queries = $this->entityManager->getRepository(Products::class)
->getProductsById($categoryId);
} else {
$ids = [];
foreach ($cat as $c) {
$ids[] = $c->getId();
}
$queries = $this->entityManager->getRepository(Products::class)
->getProductsByCategoryIds($ids);
}
// Получаем список уже сохраненных файлов.
$files = $this->productManager->getSavedFiles();
$page = $this->params()->fromRoute('page', 1);
$adapter = new DoctrineAdapter(new ORMPaginator($queries, false));
$paginator = new Paginator($adapter);
$paginator->setDefaultItemCountPerPage(1);
$paginator->setCurrentPageNumber($page);
// Визуализируем шаблон представления.
return new ViewModel([
'categoryId' => $categoryId,
'categories' => $categories,
'products' => $paginator,
'files' => $files,
]);
}