Yii Framework Forum: IntlPhoneInput bug fix - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

IntlPhoneInput bug fix

#1 User is offline   Siquell 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 01-June 17

Posted 01 June 2017 - 05:42 AM

I used extension intl-phone-input and noticed that it doesn't allow to have more than one input on page, because of repeating same id. So i changed code of function run() and registerClientScript() to that:
/**
         * Executes the widget.
         * This method registers all needed client scripts and renders
         * the text field.
         */
        public function run()
        {
                list($name, $id)=$this->resolveNameID();
                if(!isset($this->htmlOptions['id']))
                        $this->htmlOptions['id']=$id;
                if(!isset($this->htmlOptions['name']))
                        $this->htmlOptions['name']=$name;
 
                $this->registerClientScript();
                
                if($this->hasModel()) {
                        $value=$this->model->{$this->attribute};
                        echo CHtml::activeHiddenField($this->model, $this->attribute);
                }
                else {
                        $value=$this->value;
                        echo CHtml::hiddenField($this->htmlOptions['name'], $this->value);
                }
                $htmlOptions=$this->htmlOptions;
                unset($htmlOptions['name']);
                $htmlOptions['id'] = 'yt' . $htmlOptions['id'];
                echo CHtml::textField('intl-phone-input', $value, $htmlOptions);
        }
        
        /**
         * Registers the needed CSS and JavaScript.
         */
        private function registerClientScript()
        {
            $id = $this->htmlOptions['id'];
            
            $assets=Yii::app()->getAssetManager()->publish(dirname(__FILE__) . '/build');
            $lib=Yii::app()->getAssetManager()->publish(dirname(__FILE__) . '/lib');
            $this->utilsScript=$lib . '/libphonenumber/build/utils.js';

            // Configures JavaScript
            $config=$this->config();
            $options=CJavaScript::encode($config);
            $js="jQuery('#yt$id').intlTelInput({$options});";

            $clone='val()';
            if($this->E164 === true)
                    $clone='intlTelInput(\'getNumber\')';
            $js.="jQuery('#yt$id').change(function() {
                    jQuery('#$id').val(jQuery(this).{$clone});
            });";

            if($this->localisedCountryNames === true) {
                    $js.="var countryData = $.fn.intlTelInput.getCountryData();
                    $.each(countryData, function(i, country) {
                            country.name = country.name.replace(/.+\((.+)\)/,'$1');
                    });";
            }

            $cs=Yii::app()->getClientScript();
            $cs->registerCssFile($assets . '/css/intlTelInput.css');
            $cs->registerScriptFile($assets . '/js/intlTelInput.min.js');
            $cs->registerScript(__CLASS__ . '#' . $id, $js);
        }


And it works fine.
Don't have permission to comment on extension page, maybe someone else can do it.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users