RedBean простая модель случайных идентификаторов

0

Я унаследовал веб-проект, который был разработан с использованием Zend Framwork и Redbean Simple Model, и я не слишком знаком с ними.

Кажется, что страницы создаются динамически для редактирования объектов. Проблема, с которой я сталкиваюсь, состоит в том, что элементы html в динамически сгенерированных разделах страниц имеют случайно генерируемые атрибуты идентификаторов. Каждый раз, когда я перезагружаю страницу, элементы будут иметь разные идентификаторы. Идентификатор выглядит как fo-1384467680734.

Это проблема для меня, поскольку я не могу написать какой-либо css или какой-либо код jquery, характерный для некоторых элементов DOM. Возможно, одним из решений было бы дать конкретные классы CSS для элементов, на которые я нацеливаюсь, но я даже не знаю, возможно ли это.

Кто-нибудь сталкивался с этой проблемой? Вы нашли решение?

Оригинальная компания, которая разработала веб-сайт, больше не поддерживает ее, и мой клиент попросил меня позаботиться об этом и исправить несколько вещей.

ОБНОВИТЬ:

Чтобы быть более конкретным, на веб-сайте есть форма, чтобы добавить новых ритейлеров. Таким образом, существует объект Retailer, который связан с таблицей розничных продавцов в базе данных. Насколько я понимаю из кода, форма генерируется динамически на основе некоторых определений в классе (см. Код ниже).

Как вы можете видеть в коде, у ритейлера есть провинция и регион. В форме есть выпадающие списки в форме, чтобы выбрать провинцию и регион при добавлении нового розничного продавца. Однако эти выпадающие списки "тупые", и я хотел бы сделать их более "интеллектуальными" с некоторым jQuery. Я бы хотел, чтобы в раскрывающемся списке региона отображались только те регионы, которые находятся в пределах выбранной провинции. Для меня было бы проблемой не делать это нормально, кроме как здесь я не знаю, как получить доступ к раскрывающимся спискам. Мне нужно, чтобы они имели фиксированный идентификатор или могли назначать им классы, но я не знаю, как это сделать в этом контексте.

Определение продавца:

Class Default_Model_retailers extends Appclass_Redbean_SimpleModel {
    /* Db fields properties 

     */

    public $type = "retailers";
     public function getEntityModel() {
        return $this;
    }

    public function getOrderClause()
    {
        return " 1 ORDER BY name ASC ";
    }    

    public function getListColModel() 
    {

        $cols = ( array(    
            0 => (object) array('headerLabel' => 'Nom', 'fieldName' =>'name', 'width' => 110),  
            1 => (object) array('headerLabel' => 'Adresse', 'fieldName' => 'address_', 'width' => 110, 'type' => 'multiFields', 'fieldsList' => 'address.address2'), 
            //1 => (object) array('headerLabel' => 'Adresse', 'fieldName' => 'address', 'width' => 20),             
            2 => (object) array('headerLabel' => 'Code Postal', 'fieldName' =>'postcode', 'width' => 20),
            3 => (object) array('headerLabel' => 'Province', 'fieldName' =>'province_id', 'width' => 50, 'type'=>'one2one', 'table.label'=>'provinces.abbrev'),
            //3 => (object) array('headerLabel' => 'Province', 'fieldName' =>'province_id', 'width' => 50),
            4 => (object) array('headerLabel' => 'Ville', 'fieldName' =>'city', 'width' => 50),
            5 => (object) array('headerLabel' => 'Lat', 'fieldName' =>'latitude', 'width' => 50), 
            6 => (object) array('headerLabel' => 'Actions', 'fieldName' =>'actions', 'width' => 100)             
         ));
        return $cols;
    }

    public function getDefinition() {
        $exp = (object) array(
                    'id' => (object) array(
                        'label' => 'id',
                        'type' => 'refid'
                    ),
                    'name' => (object) array(
                        'label' => 'Nom du revendeur',
                        'type' => 'text'
                    ),
                    'address' => (object) array(
                        'label' => 'Adresse',
                        'type' => 'text'
                    ),
                    'address2' => (object) array(
                        'label' => 'Adresse Ligne 2',
                        'type' => 'text'
                    ),            
                    'city' => (object) array(
                        'label' => 'Ville',
                        'type' => 'text'
                    ),
                    'province_id' => (object) array(
                        'label' => 'Province',
                        'type' => 'select',
                        'subtype' => 'provinces',
                        'subtype_label' => 'name_fr'
                    ),
                    'region_id' => (object) array(
                        'label' => 'Région administrative',
                        'type' => 'select',
                        'subtype' => 'regions',
                        'subtype_label' => 'name_fr'
                    ),            
                    'phone' => (object) array(
                        'label' => 'Tél. (XXX) XXX-XXXX ',
                        'type' => 'text'
                    ),
                    'postcode' => (object) array(
                        'label' => 'Code Postal (XXXXXX)',
                        'type' => 'text',
                        'filter' => 'postcode'
                    ),
                    'contact' => (object) array(
                        'label' => 'Personne Ressource',
                        'type' => 'text'
                    ),            
                    'latitude' => (object) array(
                        'label' => 'Latitude',
                        'type' => 'text'
                    ),
                    'longitude' => (object) array(
                        'label' => 'Longitude',
                        'type' => 'text'
                    )             
        );
        return $exp;
    }

    public function getListEditDefinition() {
        $exp = (object) array(
                    'id' => (object) array(
                        'label' => 'id',
                        'type' => 'refid'
                    ),
                    'name' => (object) array(
                        'label' => 'Nom du revendeur',
                        'type' => 'text'
                    )             
        );

        return $exp;
    }

    public function getProvince()
    {
        $province = R::load('provinces', $this->province_id);
        return $province;
    }
}

Существуют также аналогичные классы для провинций и субъектов регионов. Я не буду публиковать этот код, чтобы не сделать этот пост слишком тяжелым, но я мог бы, если понадобится.

Теги:
css-selectors
zend-framework
redbean

1 ответ

0

в первую очередь эта проблема, похоже, больше связана с разработкой HTML, а затем с RedBean. Идентификатор элемента не обязательно должен быть идентификатором Bean. Во-вторых, я бы согласился пойти с классами CSS вместо ids, таким образом вы можете использовать стили css по нескольким элементам или, по крайней мере, объединить общее форматирование для некоторых из них.

Без какого-либо дополнительного кода я предполагаю, что у вас будет большой шанс помочь вам здесь

UPDATE: я еще не работал с Zend Framework, но для создания элементов он использует виджеты или аналогичные элементы. Таким образом, ваша предоставленная модель определяет общие свойства для виджетов, как кажется. Поскольку вы сказали, что создаете Dropdowns, возможно, где-то в коде существует такой проход:

$retailer = new Zend_Form_Element_Select('retailer');
or
$retailer = $form->addElement('select', ...);

поэтому быстрый поиск в Google придумал следующие вещи, чтобы настроить идентификатор:

$retailer->setAttrib('id', 'retailerBox');
$retailer = $form->addElement('select', 'attribs' =>   array(
                            'id'=>'retailerBox',
                        ), ...);

Вот несколько ссылок, которые я нашел, которые могут помочь вам с вашей задачей

Zend_Form QuickStart

Оформители формы Zend

  • 0
    Проблема в том, что я не знаю, как назначать классы этим динамически генерируемым элементам HTML, и я не знаю, как назначать им конкретные идентификаторы. Ты знаешь как? Смотрите обновление в моем оригинальном посте. Я добавил некоторые детали о том, что я хочу сделать, и немного кода.
  • 0
    к сожалению, я не в Zend Framework, но посмотрите на мой измененный ответ, может быть, это поможет вам почувствовать, что искать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню