Jak vypadá kód stojící za těmito stránkami?

Tyto stránky jsou postaveny na Zend Frameworku s rozdělením na modely, šablony prezentační vrstvy a controllery, které vše řídí.

 

Jako Model posloužila ORM knihovna Doctrine.

 

Pro View jsem použil vlastní šablonovací systém PSTL, který je podobný základnímu JSTL známému z Javy doplněnému o tagy z knihovny Stripes.

Ukázka PSP souboru

<?xml version="1.0" encoding="utf-8"?>

<%@page pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://www.hopkins.cz/pstl/core/" %>
<%@ taglib prefix="f" uri="http://www.hopkins.cz/pstl/fmt/" %>
<%@ taglib prefix="s" uri="http://www.hopkins.cz/stripes/" %>

<s:layout-definition>
    <s:layout-render name="../layouts/layout.psp" title="${category.title?category.title:category.name}" description="${category.headerDescription}" keywords="${category.headerKeywords}">
        <s:layout-component name="content">
            <h2><c:out value="${category.title?category.title:category.name}" /></h2>
            ${category.content}

        <c:import url="articles.psp"/>

        <c:import url="file_list.psp"/>

        <c:import url="photogallery.psp"/>
        </s:layout-component>
    </s:layout-render>
</s:layout-definition>

 

Jako Controller jsem použil ActionBean z mé PHP knihovny Stripes, který rozšiřuje standardní Zend_Controller o některé vhodné vlastnosti.

Ukázka ActionBeanu


	
<?php

class Cms_FilesController extends Hopkins_Stripes_ActionBean {
    protected $_validateNestedProperties = array(
                        array('method' => 'POST', 'on' => array('createFolder', 'editFolder'), 'field' => 'folder_name', 'required' => true),
                        array('method' => 'POST', 'on' => array('create', 'edit'), 'field' => 'file_name', 'required' => true),
                    );

    protected $_validationMethods = array(
                        array('method' => 'POST', 'on' => array('create', 'edit'), 'name' => '_nameValidation', 'when' => Stripes::VALIDATION_NO_ERRORS),
                        array('method' => 'POST', 'on' => array('create', 'edit'), 'name' => '_fileUploadValidation', 'when' => Stripes::VALIDATION_NO_ERRORS),
                    );


    protected $file;
    private $fileManager;


    public function init() {
        $this->fileManager = FileManager::getInstance();
    }

    /* ACTIONS INITS */
    public function initIndex() {
        $this->_preloadSelectedFileFolder($this->getRequest()->getParam('folder')?$this->getRequest()->getParam('folder'):0);
    }
    public function initSelect() {
        $this->initIndex();
    }


    /* ACTIONS */

    public function indexAction() {
        $this->view->folders = $this->fileFolderManager->search('lft > ? AND rgt < ? AND level = ? AND locale = ?', array($this->selectedFolder->getLft(), $this->selectedFolder->getRgt(), $this->selectedFolder->getLevel() + 1, Zend_Registry::get('locale')), null, null, 't.name ASC');

        $this->view->files = $this->fileManager->search('folder = ? AND locale = ?', array($this->selectedFolder->getId(), Zend_Registry::get('locale')), null, null, 'name ASC');

        if ($this->selectedFolder->getId() != 0) {
            $this->view->folderId = $this->selectedFolder->getNode()->getParent()->getId();
        }
    }

    public function createFolderAction() {
        if ($this->getRequest()->isPost()) {
            $this->fileFolderManager->save($this->folder);
            $this->folder->getNode()->insertAsLastChildOf($this->selectedFolder);

            Stripes::getInstance()->addMessage(new Hopkins_Message(
                PSTL::getInstance()->getResourceBundle()->getString('folders.create'),
                PSTL::getInstance()->getResourceBundle()->getString('folders.folderCreated', array($this->folder->getName()))
            ));

            $this->_helper->redirector->gotoSimpleAndExit('index', 'files', 'cms', array("folder" => $this->getRequest()->getParam('folder')));
        }
    }




    /* VALIDATION METHODS */

    protected function _fileUploadValidation() {
        if ($this->getRequest()->getActionName() == 'edit' && $_FILES['file_upload']['error'] == UPLOAD_ERR_NO_FILE) {
            return true;
        } elseif ($_FILES['file_upload']['error'] != UPLOAD_ERR_OK || !is_uploaded_file($_FILES['file_upload']['tmp_name'])) {
            switch($_FILES['file_upload']['error']) {
                case UPLOAD_ERR_NO_FILE:
                    $message = PSTL::getInstance()->getResourceBundle()->getString("files.fileUpload.noFile");
                    break;
                case UPLOAD_ERR_INI_SIZE:
                    $message = str_replace('{0}', ini_get('upload_max_filesize')."B", PSTL::getInstance()->getResourceBundle()->getString("files.fileUpload.sizeLimitExceeded"));
                    break;
                default:
                    $message = PSTL::getInstance()->getResourceBundle()->getString("files.fileUpload.failed");
            }
            return array('file_upload' => $message);
        }
        return true;
    }
}