Jump to content


Photo
- - - - -

Расширить список полей импорта-экспорта категорий настройками категории

импорт экспорт поля категории

Best Answer Станислав , 08 August 2013 - 14:22

Создаем новый файл media/zoo/applications/jbuniversal/framework/elements/category/layout_item_columns.php
<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 *
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Denis Smetannikov <denis@jbzoo.com>
 */

// no direct access
defined('_JEXEC') or die('Restricted access');


/**
 * Class JBCSVCategoryLayout_item_columns
 */
class JBCSVCategoryLayout_item_columns extends JBCSVCategory
{
    /**
     * @return string
     */
    public function toCSV()
    {
        return $this->_category->params->get('config.layout_item_columns');
    }

    /**
     * @param $value
     * @return Category|null
     */
    public function fromCSV($value)
    {
        $this->_category->params->set('config.layout_item_columns', $this->_getString($value));

        return $this->_category;
    }

}

Вносим изменения в файле media/zoo/applications/jbuniversal/framework/helpers/jbcsvmapper.php

    public function getCategory(Category $category)
    {
        return array(
            'id'                   => $this->_csvcell->createCategory('id', $category, 'category')->toCSV(),
            'name'                 => $this->_csvcell->createCategory('name', $category, 'category')->toCSV(),
            'alias'                => $this->_csvcell->createCategory('alias', $category, 'category')->toCSV(),
            'description'          => $this->_csvcell->createCategory('description', $category, 'category')->toCSV(),
            'parent'               => $this->_csvcell->createCategory('parent', $category, 'category')->toCSV(),
            'ordering'             => $this->_csvcell->createCategory('ordering', $category, 'category')->toCSV(),
            'published'            => $this->_csvcell->createCategory('published', $category, 'category')->toCSV(),
            'title'                => $this->_csvcell->createCategory('title', $category, 'category')->toCSV(),
            'subtitle'             => $this->_csvcell->createCategory('subtitle', $category, 'category')->toCSV(),
            'image'                => $this->_csvcell->createCategory('image', $category, 'category')->toCSV(),
            'teaser_text'          => $this->_csvcell->createCategory('teaser_text', $category, 'category')->toCSV(),
            'teaser_image'         => $this->_csvcell->createCategory('teaser_image', $category, 'category')->toCSV(),
            'metadata_title'       => $this->_csvcell->createCategory('metadata_title', $category, 'category')->toCSV(),
            'metadata_description' => $this->_csvcell->createCategory('metadata_description', $category, 'category')->toCSV(),
            'metadata_keywords'    => $this->_csvcell->createCategory('metadata_keywords', $category, 'category')->toCSV(),
            'metadata_robots'      => $this->_csvcell->createCategory('metadata_robots', $category, 'category')->toCSV(),
            'metadata_author'      => $this->_csvcell->createCategory('metadata_author', $category, 'category')->toCSV(),
            // Добавлено  
            'layout_item_columns'  => $this->_csvcell->createCategory('layout_item_columns', $category, 'category')->toCSV(),
        );
    }
public function getCategoryFields()
    {
        return array(
            'core'    => array(
                'id'        => JText::_('JBZOO_CATEGORY_ID'),
                'name'      => JText::_('JBZOO_CATEGORY_NAME'),
                'alias'     => JText::_('JBZOO_CATEGORY_ALIAS'),
                'parent'    => JText::_('JBZOO_CATEGORY_PARENT'),
                'ordering'  => JText::_('JBZOO_CATEGORY_ORDERING'),
                'published' => JText::_('JBZOO_CATEGORY_PUBLISHED'),
            ),
            'content' => array(
                'title'        => JText::_('JBZOO_CATEGORY_TITLE'),
                'description'  => JText::_('JBZOO_CATEGORY_DESCRIPTION'),
                'subtitle'     => JText::_('JBZOO_CATEGORY_SUBTITLE'),
                'image'        => JText::_('JBZOO_CATEGORY_IMAGE'),
                'teaser_text'  => JText::_('JBZOO_CATEGORY_TEASER_TEXT'),
                'teaser_image' => JText::_('JBZOO_CATEGORY_TEASER_IMAGE'),
                // Добавлено
                'layout_item_columns'  => JText::_('JBZOO_LAYOUT_ITEM_COLUMNS'),
            ),
            'meta'    => array(
                'metadata_title'       => JText::_('JBZOO_CATEGORY_METADATA_TITLE'),
                'metadata_description' => JText::_('JBZOO_CATEGORY_METADATA_DESCRIPTION'),
                'metadata_keywords'    => JText::_('JBZOO_CATEGORY_METADATA_KEYWORDS'),
                'metadata_robots'      => JText::_('JBZOO_CATEGORY_METADATA_ROBOTS'),
                'metadata_author'      => JText::_('JBZOO_CATEGORY_METADATA_AUTHOR'),
            )
        );
    }
    public function categoryFieldToMeta($fieldName)
    {
        $fieldName = strtolower(trim($fieldName));
        $assign    = array(
            'id'                   => array('group' => 'category', 'name' => 'id'),
            'name'                 => array('group' => 'category', 'name' => 'name'),
            'alias'                => array('group' => 'category', 'name' => 'alias'),
            'parent'               => array('group' => 'category', 'name' => 'parent'),
            'ordering'             => array('group' => 'category', 'name' => 'ordering'),
            'published'            => array('group' => 'category', 'name' => 'published'),
            'title'                => array('group' => 'category', 'name' => 'title'),
            'description'          => array('group' => 'category', 'name' => 'description'),
            'subtitle'             => array('group' => 'category', 'name' => 'subtitle'),
            'image'                => array('group' => 'category', 'name' => 'image'),
            'teaser_text'          => array('group' => 'category', 'name' => 'teaser_text'),
            'teaser_image'         => array('group' => 'category', 'name' => 'teaser_image'),
            'metadata_title'       => array('group' => 'category', 'name' => 'metadata_title'),
            'metadata_description' => array('group' => 'category', 'name' => 'metadata_description'),
            'metadata_keywords'    => array('group' => 'category', 'name' => 'metadata_keywords'),
            'metadata_robots'      => array('group' => 'category', 'name' => 'metadata_robots'),
            'metadata_author'      => array('group' => 'category', 'name' => 'metadata_author'),
            // Добавлено
            'layout_item_columns'  => array('group' => 'category', 'name' => 'layout_item_columns'), // Добавлено
        );

Ну и результат изменений - в группе "Контент" появляется новое поле "Колонка элементов". Но полагаю, что было бы лучше создать 2 отдельные группы для "расширенных" полей - "Настройки", "Шаблон" и поместить туда все тонкие настройки в соответствии с вкладками настроек категории.
 

hNaB71W.jpg

 

Как я уже писал в предыдущем посте, изменять по сути надо совсем немного: надо создать дополнительные файлы классов для параметров из "Настройки" и "Шаблон", прописать в маппере 2 новые группы и там же дополнить поля импорта/экспорта категорий новыми полями.

 

Денис, по поводу большого количества полей и необходимости создавать их в CSV, то каждый может использовать то, что ему надо. Кому-то надо прописать размеры картинок, кому-то как мне - шаблон категорий. Использовать все поля же необязательно. Выпадающий список получится, конечно громоздкий, но мы ведь любим JBZoo именно за то, что он действительно Universal и позволяет делать множество настроек, которые недоступны в стандартном Zoo и других CCK.

 

Надеюсь на положительное решение и готов поучаствовать в рутинной работе, например по созданию файлов классов для каждой настройки, настроек шаблона и модификации маппера.

Go to the full post


  • This topic is locked This topic is locked
2 replies to this topic

#1 Станислав

Станислав
  • JBZoo User (rus)
  • User rate: 18
  • posts: 211
  • topics: 7

Posted 08 August 2013 - 08:51

Добрый день!

 

Очень бы хотелось увидеть при импорте-экспорте категорий все поля общих настроек категории и всех настроек шаблона категории, а именно настройки из поля params таблицы zoo_category:

content.*

config.*

template.*  (кроме служебного поля template.lastmodified)

 

Мотивация следующая. Иногда для разных категорий товаров используются разные шаблоны, например, для отображения анонсов товаров могут использоваться "стандартные" анонсы, а могут использоваться и таблицы. То есть необходимо для каждой категории присвоить свое значение шаблона. В моем случае мне было необходимо присвоить разным категориям разные шаблоны настройки "Колонка элементов". При начальном импорте большого количества категорий товаров, а у меня это около 4000, ручное приписывание заняло бы несколько дней. Помимо этого при автоматическом добавлении новых категорий опять надо прописывать шаблоны для новых категорий. Тут добавляется еще проблема в том, как быстро вычислить эти новые категории. Удобного инструментария для такой операции нет.

 

Я немного покопался во внутренностях JBZoo и разобрался со списком полей импорта-экспорта. Добавил новый класс поля экспорта JBCSVCategoryLayout_item_columns для "Колонка элементов" (config.layout_item_columns) по аналогии с существующими полями в media/zoo/applications/jbuniversal/framework/elements и добавил его в маппере элементов media/zoo/applications/jbuniversal/framework/helpers/jbcsvmapper.php

 

Собственно говоря, все прекрасно работает, но как обычно собственные хаки имеют такое плохое свойство как затирание при очередном обновлении.

 

Пожелание состоит в том, чтобы изначально добавить все возможные настройки из params категории. Доработка не требует каких-то кардинальных изменений ядра, просто необходимо добавить дополнительные поля импорта/экспорта и измененить маппер.


Edited by Станислав, 08 August 2013 - 08:55.

  • 0

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#2 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 08 August 2013 - 12:24

Ok. Спасибо.

Да, вы все верно дополнили. Рад, что кто-то разобрался во внутренностях импорта =)

Не думал, что кто-то будет загружать настройки категорий и материалов, поэтому не стал делать такую возможность.
Тем более что на каждую настройку делать отдельное поле в CSV - жесть та еще.
А вкладывать все эти настройки в одно поле - тоже не айс. Пару десяткой то там будет.
Не удобства со всех сторон в общем...

Вы можете дать свой вариант класса для импорта/экспорта настроек?
Просто охота посмотреть стороннее решение.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 Станислав

Станислав
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 18
  • posts: 211
  • topics: 7

Posted 08 August 2013 - 14:22   Best Answer

Создаем новый файл media/zoo/applications/jbuniversal/framework/elements/category/layout_item_columns.php
<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 *
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Denis Smetannikov <denis@jbzoo.com>
 */

// no direct access
defined('_JEXEC') or die('Restricted access');


/**
 * Class JBCSVCategoryLayout_item_columns
 */
class JBCSVCategoryLayout_item_columns extends JBCSVCategory
{
    /**
     * @return string
     */
    public function toCSV()
    {
        return $this->_category->params->get('config.layout_item_columns');
    }

    /**
     * @param $value
     * @return Category|null
     */
    public function fromCSV($value)
    {
        $this->_category->params->set('config.layout_item_columns', $this->_getString($value));

        return $this->_category;
    }

}

Вносим изменения в файле media/zoo/applications/jbuniversal/framework/helpers/jbcsvmapper.php

    public function getCategory(Category $category)
    {
        return array(
            'id'                   => $this->_csvcell->createCategory('id', $category, 'category')->toCSV(),
            'name'                 => $this->_csvcell->createCategory('name', $category, 'category')->toCSV(),
            'alias'                => $this->_csvcell->createCategory('alias', $category, 'category')->toCSV(),
            'description'          => $this->_csvcell->createCategory('description', $category, 'category')->toCSV(),
            'parent'               => $this->_csvcell->createCategory('parent', $category, 'category')->toCSV(),
            'ordering'             => $this->_csvcell->createCategory('ordering', $category, 'category')->toCSV(),
            'published'            => $this->_csvcell->createCategory('published', $category, 'category')->toCSV(),
            'title'                => $this->_csvcell->createCategory('title', $category, 'category')->toCSV(),
            'subtitle'             => $this->_csvcell->createCategory('subtitle', $category, 'category')->toCSV(),
            'image'                => $this->_csvcell->createCategory('image', $category, 'category')->toCSV(),
            'teaser_text'          => $this->_csvcell->createCategory('teaser_text', $category, 'category')->toCSV(),
            'teaser_image'         => $this->_csvcell->createCategory('teaser_image', $category, 'category')->toCSV(),
            'metadata_title'       => $this->_csvcell->createCategory('metadata_title', $category, 'category')->toCSV(),
            'metadata_description' => $this->_csvcell->createCategory('metadata_description', $category, 'category')->toCSV(),
            'metadata_keywords'    => $this->_csvcell->createCategory('metadata_keywords', $category, 'category')->toCSV(),
            'metadata_robots'      => $this->_csvcell->createCategory('metadata_robots', $category, 'category')->toCSV(),
            'metadata_author'      => $this->_csvcell->createCategory('metadata_author', $category, 'category')->toCSV(),
            // Добавлено  
            'layout_item_columns'  => $this->_csvcell->createCategory('layout_item_columns', $category, 'category')->toCSV(),
        );
    }
public function getCategoryFields()
    {
        return array(
            'core'    => array(
                'id'        => JText::_('JBZOO_CATEGORY_ID'),
                'name'      => JText::_('JBZOO_CATEGORY_NAME'),
                'alias'     => JText::_('JBZOO_CATEGORY_ALIAS'),
                'parent'    => JText::_('JBZOO_CATEGORY_PARENT'),
                'ordering'  => JText::_('JBZOO_CATEGORY_ORDERING'),
                'published' => JText::_('JBZOO_CATEGORY_PUBLISHED'),
            ),
            'content' => array(
                'title'        => JText::_('JBZOO_CATEGORY_TITLE'),
                'description'  => JText::_('JBZOO_CATEGORY_DESCRIPTION'),
                'subtitle'     => JText::_('JBZOO_CATEGORY_SUBTITLE'),
                'image'        => JText::_('JBZOO_CATEGORY_IMAGE'),
                'teaser_text'  => JText::_('JBZOO_CATEGORY_TEASER_TEXT'),
                'teaser_image' => JText::_('JBZOO_CATEGORY_TEASER_IMAGE'),
                // Добавлено
                'layout_item_columns'  => JText::_('JBZOO_LAYOUT_ITEM_COLUMNS'),
            ),
            'meta'    => array(
                'metadata_title'       => JText::_('JBZOO_CATEGORY_METADATA_TITLE'),
                'metadata_description' => JText::_('JBZOO_CATEGORY_METADATA_DESCRIPTION'),
                'metadata_keywords'    => JText::_('JBZOO_CATEGORY_METADATA_KEYWORDS'),
                'metadata_robots'      => JText::_('JBZOO_CATEGORY_METADATA_ROBOTS'),
                'metadata_author'      => JText::_('JBZOO_CATEGORY_METADATA_AUTHOR'),
            )
        );
    }
    public function categoryFieldToMeta($fieldName)
    {
        $fieldName = strtolower(trim($fieldName));
        $assign    = array(
            'id'                   => array('group' => 'category', 'name' => 'id'),
            'name'                 => array('group' => 'category', 'name' => 'name'),
            'alias'                => array('group' => 'category', 'name' => 'alias'),
            'parent'               => array('group' => 'category', 'name' => 'parent'),
            'ordering'             => array('group' => 'category', 'name' => 'ordering'),
            'published'            => array('group' => 'category', 'name' => 'published'),
            'title'                => array('group' => 'category', 'name' => 'title'),
            'description'          => array('group' => 'category', 'name' => 'description'),
            'subtitle'             => array('group' => 'category', 'name' => 'subtitle'),
            'image'                => array('group' => 'category', 'name' => 'image'),
            'teaser_text'          => array('group' => 'category', 'name' => 'teaser_text'),
            'teaser_image'         => array('group' => 'category', 'name' => 'teaser_image'),
            'metadata_title'       => array('group' => 'category', 'name' => 'metadata_title'),
            'metadata_description' => array('group' => 'category', 'name' => 'metadata_description'),
            'metadata_keywords'    => array('group' => 'category', 'name' => 'metadata_keywords'),
            'metadata_robots'      => array('group' => 'category', 'name' => 'metadata_robots'),
            'metadata_author'      => array('group' => 'category', 'name' => 'metadata_author'),
            // Добавлено
            'layout_item_columns'  => array('group' => 'category', 'name' => 'layout_item_columns'), // Добавлено
        );

Ну и результат изменений - в группе "Контент" появляется новое поле "Колонка элементов". Но полагаю, что было бы лучше создать 2 отдельные группы для "расширенных" полей - "Настройки", "Шаблон" и поместить туда все тонкие настройки в соответствии с вкладками настроек категории.
 

hNaB71W.jpg

 

Как я уже писал в предыдущем посте, изменять по сути надо совсем немного: надо создать дополнительные файлы классов для параметров из "Настройки" и "Шаблон", прописать в маппере 2 новые группы и там же дополнить поля импорта/экспорта категорий новыми полями.

 

Денис, по поводу большого количества полей и необходимости создавать их в CSV, то каждый может использовать то, что ему надо. Кому-то надо прописать размеры картинок, кому-то как мне - шаблон категорий. Использовать все поля же необязательно. Выпадающий список получится, конечно громоздкий, но мы ведь любим JBZoo именно за то, что он действительно Universal и позволяет делать множество настроек, которые недоступны в стандартном Zoo и других CCK.

 

Надеюсь на положительное решение и готов поучаствовать в рутинной работе, например по созданию файлов классов для каждой настройки, настроек шаблона и модификации маппера.


Edited by Станислав, 08 August 2013 - 14:31.

  • 3

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 






Click to return to top of page in style!