Announcement
- Index
- Thelia 2 - Section française
- Développement
- Création d'un nouveau type de contenu Thélia
#1 Création d'un nouveau type de contenu Thélia
(07-08-2018 16:07:48)
Bonjour,
je réalise un module qui vise à ajouter un nouveau type de contenu à Thélia, soit une nouvelle "Resource" :
Thélia propose : Folder, Content, Category, Product, Brand etc... je souhaiterais ajoute "News" par exemple.
Tout à bien débuté mais je rencontre des difficultés pour la gestion des images et des documents. D'une part le FileController me renvoie l'erreur suivante :
1/1 ResourceException in AdminResources.php line 173: Resource `thelia` not found
in AdminResources.php line 173
at AdminResources->getResource('news', 'thelia') in FileController.php line 77
at FileController->saveFileAjaxAction('1', 'news', 'image', array('image/jpeg' => array('jpg', 'jpeg'), 'image/png' => array('png'), 'image/gif' => array('gif')), array()) in FileController.php line 277
at FileController->saveImageAjaxAction('1', 'news')
at call_user_func_array(array(object(FileController), 'saveImageAjaxAction'), array('1', 'news')) in HttpKernel.php line 139
at HttpKernel->handleRaw(object(Request), '1') in HttpKernel.php line 62
at HttpKernel->handle(object(Request), '1', true) in TheliaHttpKernel.php line 76
at TheliaHttpKernel->handle(object(Request), '1', true) in BackOfficePathMiddleware.php line 106
at BackOfficePathMiddleware->handle(object(Request), '1', true) in ParamInitMiddleware.php line 87
at ParamInitMiddleware->handle(object(Request), '1', true) in SessionMiddleware.php line 80
at SessionMiddleware->handle(object(Request), '1', true) in StackedHttpKernel.php line 23
at StackedHttpKernel->handle(object(Request), '1', true) in Kernel.php line 185
at Kernel->handle(object(Request)) in index_dev.php line 37
D'autre part le FileManager me refoule car il ne connait pas l'ImageType "news"
J'ai réussi à contourner cela en réécrivant partiellement FileController et en faisant pointer les url du type image/type/news/id/save-ajax vers celui-ci grâce au router du module mais cela me fait réécrire beaucoup de code je trouve.
Soit les 2 questions suivantes :
1. N'y a t'il pas un moyen d'agir sur la fonction
$this->checkAuth($this->getAdminResources()->getResource($parentType, static::MODULE_RIGHT), array(), AccessManager::UPDATE); pour que le FileController accepte la modification d'une ressource de type News sans tout réécrire ?
(actuellement je reprends les fonctions du FileController en ajoutant $this->getAdminResources()->addModuleResources(['NEWS' => 'admin.news']);)
2. Comment ajouter un nouveau type d'image au FileManager de Thélia ?
(actuellement j'ai intégré $fileManager->addFileModel($objectType, 'news', 'NewsSystem\Model\NewsImage'); dans la fonction FileController->processFile();
J'espère avoir été suffisamment clair !
Merci d'avance
#2 Re: Création d'un nouveau type de contenu Thélia
(08-08-2018 08:00:04)
Bonjour,
en fait ce que je souhaite finalement c'est étendre, grâce à mon module, le fichier Thelia\Config\Resources\config.xml mais je ne comprends pas ce dernier.
D'une part rajouter <parameter key="NEWS">admin.news</parameter> dans
<parameter key="admin.resources" type="collection">
<parameter key="thelia" type="collection">
<parameter key="SUPERADMINISTRATOR">SUPERADMINISTRATOR</parameter>
<parameter key="ADDRESS">admin.address</parameter>
<parameter key="ADMINISTRATOR">admin.configuration.administrator</parameter>
<parameter key="ADVANCED_CONFIGURATION">admin.configuration.advanced</parameter>
<parameter key="AREA">admin.configuration.area</parameter>
<parameter key="ATTRIBUTE">admin.configuration.attribute</parameter>
<parameter key="BRAND">admin.brand</parameter>
<parameter key="CATEGORY">admin.category</parameter>
<parameter key="CONFIG">admin.configuration"</parameter>
<parameter key="CONTENT">admin.content</parameter>
<parameter key="COUNTRY">admin.configuration.country</parameter>
<parameter key="STATE">admin.configuration.state</parameter>
<parameter key="COUPON">admin.coupon</parameter>
<parameter key="CURRENCY">admin.configuration.currency</parameter>
<parameter key="CUSTOMER">admin.customer</parameter>
<parameter key="FEATURE">admin.configuration.feature</parameter>
<parameter key="FOLDER">admin.folder</parameter>
<parameter key="HOME">admin.home</parameter>
<parameter key="LANGUAGE">admin.configuration.language</parameter>
<parameter key="MAILING_SYSTEM">admin.configuration.mailing-system</parameter>
<parameter key="MESSAGE">admin.configuration.message</parameter>
<parameter key="MODULE">admin.module</parameter>
<parameter key="HOOK">admin.hook</parameter>
<parameter key="MODULE_HOOK">admin.module-hook</parameter>
<parameter key="ORDER">admin.order</parameter>
<parameter key="ORDER_STATUS">admin.configuration.order-status</parameter>
<parameter key="PRODUCT">admin.product</parameter>
<parameter key="PROFILE">admin.configuration.profile</parameter>
<parameter key="SHIPPING_ZONE">admin.configuration.shipping-zone</parameter>
<parameter key="TAX">admin.configuration.tax</parameter>
<parameter key="TEMPLATE">admin.configuration.template</parameter>
<parameter key="SYSTEM_LOG">admin.configuration.system-logs</parameter>
<parameter key="ADMIN_LOG">admin.configuration.admin-logs</parameter>
<parameter key="STORE">admin.configuration.store</parameter>
<parameter key="TRANSLATIONS">admin.configuration.translations</parameter>
<parameter key="UPDATE">admin.configuration.update</parameter>
<parameter key="EXPORT">admin.export</parameter>
<parameter key="IMPORT">admin.import</parameter>
<parameter key="TOOLS">admin.tools</parameter>
<parameter key="SALES">admin.sales</parameter>
<parameter key="API">admin.configuration.api</parameter>
<parameter key="TITLE">admin.customer.title</parameter>
</parameter>
</parameter>
et d'autre part rajouter
<parameter key="document.news">NewsModule\Model\NewsDocument</parameter>
<parameter key="image.news">NewsModule\Model\NewsImage</parameter>
dans
<parameter key="file_model.classes" type="collection">
<parameter key="document.product">Thelia\Model\ProductDocument</parameter>
<parameter key="image.product">Thelia\Model\ProductImage</parameter>
<parameter key="document.category">Thelia\Model\CategoryDocument</parameter>
<parameter key="image.category">Thelia\Model\CategoryImage</parameter>
<parameter key="document.content">Thelia\Model\ContentDocument</parameter>
<parameter key="image.content">Thelia\Model\ContentImage</parameter>
<parameter key="document.folder">Thelia\Model\FolderDocument</parameter>
<parameter key="image.folder">Thelia\Model\FolderImage</parameter>
<parameter key="document.brand">Thelia\Model\BrandDocument</parameter>
<parameter key="image.brand">Thelia\Model\BrandImage</parameter>
<parameter key="image.module">Thelia\Model\ModuleImage</parameter>
</parameter>
Je ne vois pas comment inclure cela dans le fichier config.xml de mon module. Quelqu'un pourrait-il m'aiguiller ?
Merci !
- Index
- Thelia 2 - Section française
- Développement
- Création d'un nouveau type de contenu Thélia