Jump to content


Photo
- - - - -

Автоматическая генерация названий


Best Answer Cheren-dow , 18 January 2016 - 14:19

Русские названия генерирует без пробела

Здравствуйте, Замените код в файле:

\media\zoo\applications\jbuniversal\templates\auto\assets\js\widget\namecreator.js

на:

/**
 * 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       Sergey Kalistratov <kalistratov.s.m@jgmail.com>
 */

;
(function ($, window, document, undefined) {

    /**
     * NameCreator widget
     */
    JBZoo.widget('JBZoo.NameCreator', {
        'elResYear'  : '.jsNameYear',
        'elResColor' : '.jsNameColor',
        'elRestCity' : '.jsNameCity',
        'elRestCat'  : '.jsNameCat',
        'elCity'     : '#elements66f74b23-cd70-4f76-8a7e-a24412fad598option',
        'elYear'     : 'f83cbbe4-bb47-46f0-81cd-b885ae7a388e',
        'elColor'    : 'b8b4f50f-34ab-49f3-a56f-0e684d72a2f2',
        'elCategory' : '#elements_itemcategoryvalue',
        'elName'     : '_itemname'
    }, {

        init : function($this){
            $this.setupName($this);
        },

        /**
         * Setup name on submit form.
         *
         * @param $this
         */
        setupName : function($this) {
            $this.$('#submit-button').on('click', function (e) {
                $this._processCity($this);
                $this._processYear($this);
                $this._processColor($this);
                $this._processCategories($this);

                var itemName, category, color, year, city;

                category = $($this.options.elRestCat).text();
                year     = $($this.options.elResYear).text();
                color    = $($this.options.elResColor).text();
                city     = $($this.options.elRestCity).text();

                itemName = category + color + year + city;

                $('input[name*=' + $this.options.elName + ']').attr('value', itemName);

                setTimeout(function () {
                    document.submissionForm.submit();
                }, 200);

                e.preventDefault();
            });
        },

        /**
         * Find and set city value.
         *
         * @param $this
         * @private
         */
        _processCity : function ($this) {
            var city = $this.$($this.options.elCity + ' option:selected').text();

            //  Write city selected value.
            $($this.options.elRestCity).text(city);
        },

        /**
         * Find and ser color value.
         *
         * @param $this
         * @private
         */
        _processColor : function ($this) {
            var queryColor = 'input[name*=' + $this.options.elColor + ']';
            var color      = $this.$(queryColor + ':checked').val();

            //  Write color selected value.
            if (color) {
                $($this.options.elResColor).text(' (' + color + ')');
            }
        },

        /**
         * Find and set year.
         *
         * @param $this
         * @private
         */
        _processYear : function ($this) {
            //  Write year value.
            $($this.options.elResYear).text(' - ' +  $this.$('input[name*=' + $this.options.elYear + ']').val() + ', ');
        },

        /**
         * Find and set category values.
         *
         * @param $this
         * @private
         */
        _processCategories : function ($this) {
            var categoryName = '';

            $this.$($this.options.elCategory+ ' option:selected').each(function (index, value) {

                categoryName = categoryName + $this._clearStr($(this).html());

                if (index == 0) {
                    categoryName = categoryName + ' / ';
                }

            });

            $($this.options.elRestCat).text(categoryName);
        },

        /**
         * Clear string.
         *
         * @param str
         * @returns {*}
         * @private
         */
        _clearStr : function (str) {
            return str.replace(/(&nbsp;|\.&nbsp;|-&nbsp;)/g, '');
        }

    });

})(jQuery, window, document);


И все-таки у меня не получается задать свои элементы формы, которые бы участвовали в автособирании названия. Если я подставлю ID элемента вместо elYear, то нормально. Но если я создаю свое, то не получамба. 

Новый метод который вы сделали по аналогу  _processYear добавьте в метод setupName, что бы он вызывался. В вашем случае необходимо добавить:

$this._processSn($this);
Go to the full post


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

#1 Хозяин Морей

Хозяин Морей
  • JBZoo User (rus)
  • User rate: ~
  • posts: 6
  • topics: 3

Posted 09 December 2015 - 14:35

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

 

А где можно узнать, как генерируются имена, если надо, чтоб названия формировались сами из других полей? И если на сайте разные типы материалов, то чтоб у каждого формировалось по своему.


  • 0

#2 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 09 December 2015 - 21:53

Хозяин Морей, здравствуйте, генерация происходит с помощью JS скрипта который расположен по пути:

\media\zoo\applications\jbuniversal\templates\auto\assets\js\widget\namecreator.js

По клику на кнопку отправки формы берется значения из указанных в JS элементов формы.

И если на сайте разные типы материалов, то чтоб у каждого формировалось по своему.

В том случае нужно создавать несколько дублей JS файлов и подключать их в зависимости от типа в файле:

\media\zoo\applications\jbuniversal\templates\auto\_submission.php

Например делать проверку на ID типа, получить id типа можно с помощью:

$this->type->id

Или же по псевдониму типа:

$this->item->type

  • 2
Изображение
 

#3 Iv_Le

Iv_Le
  • JBZoo User (rus)
  • User rate: 8.3
  • posts: 219
  • topics: 45

Posted 15 January 2016 - 00:48

Русские названия генерирует без пробела

 

 

6wVwQDo7.png


  • 0

#4 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 15 January 2016 - 08:22

Iv_Le, можете дать ссылку на сайт? 


  • 0
Изображение
 

#5 Iv_Le

Iv_Le
  • JBZoo User (rus)
  • User rate: 8.3
  • posts: 219
  • topics: 45

Posted 15 January 2016 - 11:00

Отправил ЛС.

 

И все-таки у меня не получается задать свои элементы формы, которые бы участвовали в автособирании названия. Если я подставлю ID элемента вместо elYear, то нормально. Но если я создаю свое, то не получамба. 

/**
 * 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       Sergey Kalistratov <kalistratov.s.m@jgmail.com>
 */

;
(function ($, window, document, undefined) {

    /**
     * NameCreator widget
     */
    JBZoo.widget('JBZoo.NameCreator', {
        'elResYear'  : '.jsNameYear',
        'elResColor' : '.jsNameColor',
        'elRestCity' : '.jsNameCity',
        'elRestCat'  : '.jsNameCat',
		'elRestSn'   : '.jsNameSn',
        'elCity'     : '#elements66f74b23-cd70-4f76-8a7e-a24412fad598option',
        'elYear'     : 'f83cbbe4-bb47-46f0-81cd-b885ae7a388e',
        'elColor'    : 'b8b4f50f-34ab-49f3-a56f-0e684d72a2f2',
        'elCategory' : '#elements_itemcategoryvalue',
        'elName'     : '_itemname',
        'elSn'	     : '7fe518d8-5517-4a1f-abc0-30f8d0cb5786'
    }, {

        init : function($this){
            $this.setupName($this);
        },

        /**
         * Setup name on submit form.
         *
         * @param $this
         */
        setupName : function($this) {
            $this.$('#submit-button').on('click', function (e) {
                $this._processCity($this);
                $this._processYear($this);
                $this._processColor($this);
                $this._processCategories($this);
				$this._processSn($this);

                var itemName, category, color, year, city, sn;

                category = $($this.options.elRestCat).text();
                year     = $($this.options.elResYear).text();
                color    = $($this.options.elResColor).text();
                city     = $($this.options.elRestCity).text();
				sn       = $($this.options.elRestSn).text();

                itemName = category + sn + color + year + city;

                $('input[name*=' + $this.options.elName + ']').attr('value', itemName);

                setTimeout(function () {
                    document.submissionForm.submit();
                }), 200;

                e.preventDefault();
            });
        },

        /**
         * Find and set city value.
         *
         * @param $this
         * @private
         */
        _processCity : function ($this) {
            var city = $this.$($this.options.elCity + ' option:selected').text();

            //  Write city selected value.
            $($this.options.elRestCity).text(city);
        },

        /**
         * Find and ser color value.
         *
         * @param $this
         * @private
         */
        _processColor : function ($this) {
            var queryColor = 'input[name*=' + $this.options.elColor + ']';
            var color      = $this.$(queryColor + ':checked').val();

            //  Write color selected value.
            if (color) {
                $($this.options.elResColor).text(' (' + color + ')');
            }
        },

        /**
         * Find and set year.
         *
         * @param $this
         * @private
         */
        _processYear : function ($this) {
            //  Write year value.
            $($this.options.elResYear).text(' - ' +  $this.$('input[name*=' + $this.options.elYear + ']').val() + ', ');
        },
		 /**
         * Find and set year.
         *
         * @param $this
         * @private
         */
        _processSn : function ($this) {
            //  Write year value.
            $($this.options.elRestSn).text(' - ' +  $this.$('input[name*=' + $this.options.elSn + ']').val() + ', ');
        },
        /**
         * Find and set category values.
         *
         * @param $this
         * @private
         */
        _processCategories : function ($this) {
            var categoryName = '';

            $this.$($this.options.elCategory+ ' option:selected').each(function (index, value) {

                categoryName = categoryName + $this._clearStr($(this).text());

                if (index == 0) {
                    categoryName = categoryName + ' / ';
                }

            });

            $($this.options.elRestCat).text(categoryName);
        },

        /**
         * Clear string.
         *
         * @param str
         * @returns {*}
         * @private
         */
        _clearStr : function (str) {
            return str.replace(/[^а-яА-ЯёЁa-zA-Z0-9]/g, '');
        }

    });

})(jQuery, window, document);

Кроме того, заполнил файл jbads.php и не катит. Шо я не понял?

Эту тему прочитал


  • 0

#6 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 18 January 2016 - 14:19   Best Answer

Русские названия генерирует без пробела

Здравствуйте, Замените код в файле:

\media\zoo\applications\jbuniversal\templates\auto\assets\js\widget\namecreator.js

на:

/**
 * 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       Sergey Kalistratov <kalistratov.s.m@jgmail.com>
 */

;
(function ($, window, document, undefined) {

    /**
     * NameCreator widget
     */
    JBZoo.widget('JBZoo.NameCreator', {
        'elResYear'  : '.jsNameYear',
        'elResColor' : '.jsNameColor',
        'elRestCity' : '.jsNameCity',
        'elRestCat'  : '.jsNameCat',
        'elCity'     : '#elements66f74b23-cd70-4f76-8a7e-a24412fad598option',
        'elYear'     : 'f83cbbe4-bb47-46f0-81cd-b885ae7a388e',
        'elColor'    : 'b8b4f50f-34ab-49f3-a56f-0e684d72a2f2',
        'elCategory' : '#elements_itemcategoryvalue',
        'elName'     : '_itemname'
    }, {

        init : function($this){
            $this.setupName($this);
        },

        /**
         * Setup name on submit form.
         *
         * @param $this
         */
        setupName : function($this) {
            $this.$('#submit-button').on('click', function (e) {
                $this._processCity($this);
                $this._processYear($this);
                $this._processColor($this);
                $this._processCategories($this);

                var itemName, category, color, year, city;

                category = $($this.options.elRestCat).text();
                year     = $($this.options.elResYear).text();
                color    = $($this.options.elResColor).text();
                city     = $($this.options.elRestCity).text();

                itemName = category + color + year + city;

                $('input[name*=' + $this.options.elName + ']').attr('value', itemName);

                setTimeout(function () {
                    document.submissionForm.submit();
                }, 200);

                e.preventDefault();
            });
        },

        /**
         * Find and set city value.
         *
         * @param $this
         * @private
         */
        _processCity : function ($this) {
            var city = $this.$($this.options.elCity + ' option:selected').text();

            //  Write city selected value.
            $($this.options.elRestCity).text(city);
        },

        /**
         * Find and ser color value.
         *
         * @param $this
         * @private
         */
        _processColor : function ($this) {
            var queryColor = 'input[name*=' + $this.options.elColor + ']';
            var color      = $this.$(queryColor + ':checked').val();

            //  Write color selected value.
            if (color) {
                $($this.options.elResColor).text(' (' + color + ')');
            }
        },

        /**
         * Find and set year.
         *
         * @param $this
         * @private
         */
        _processYear : function ($this) {
            //  Write year value.
            $($this.options.elResYear).text(' - ' +  $this.$('input[name*=' + $this.options.elYear + ']').val() + ', ');
        },

        /**
         * Find and set category values.
         *
         * @param $this
         * @private
         */
        _processCategories : function ($this) {
            var categoryName = '';

            $this.$($this.options.elCategory+ ' option:selected').each(function (index, value) {

                categoryName = categoryName + $this._clearStr($(this).html());

                if (index == 0) {
                    categoryName = categoryName + ' / ';
                }

            });

            $($this.options.elRestCat).text(categoryName);
        },

        /**
         * Clear string.
         *
         * @param str
         * @returns {*}
         * @private
         */
        _clearStr : function (str) {
            return str.replace(/(&nbsp;|\.&nbsp;|-&nbsp;)/g, '');
        }

    });

})(jQuery, window, document);


И все-таки у меня не получается задать свои элементы формы, которые бы участвовали в автособирании названия. Если я подставлю ID элемента вместо elYear, то нормально. Но если я создаю свое, то не получамба. 

Новый метод который вы сделали по аналогу  _processYear добавьте в метод setupName, что бы он вызывался. В вашем случае необходимо добавить:

$this._processSn($this);

  • 2
Изображение
 

#7 Iv_Le

Iv_Le
  • JBZoo User (rus)
  • User rate: 8.3
  • posts: 219
  • topics: 45

Posted 18 January 2016 - 17:47

Спасибо. А в чем трабл был? Я про русские слова.


Edited by Iv_Le, 18 January 2016 - 17:48.

  • 0

#8 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 18 January 2016 - 19:46

Iv_Le, регулярное выражение в JS жестко вырезала все символы и оставляло только кириллицу и латиницу. Вопрос можно считать решенным, закрываем топик? 


  • 0
Изображение
 

#9 Iv_Le

Iv_Le
  • JBZoo User (rus)
  • User rate: 8.3
  • posts: 219
  • topics: 45

Posted 18 January 2016 - 19:49

Я бы предложил так: топик этот закрыть, НО, по отдельно по каждому шаблону создать отдельную тему незакрываемую, где бы копились вопросы и ответы.

 

Поздравляю с некурением 787 дней.


Edited by Iv_Le, 18 January 2016 - 19:51.

  • 1




Click to return to top of page in style!