партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Это форум по решению для битрикс «Модуль Свойства-таблицы».
Страницы: 1
Ответить
RSS
grain:table.view Обновление идентификатора колонки таблицы, Сам обновляется идентификатор колонки таблицы.
 
При изменении таблицы - свойства grain:table сам обновляется идентификатор колнки таблицы.
Например. Создаем свойство-таблицу со столбцами description и value:

description: Описание
value: Значение

В следующий раз при входе в редактор - самопросизвольно меняются идентификаторы столбцов на:
descriptionuvak
valuemitc

Еще раз зайдем - еще раз поменяются. Как это исправить?
 
  • Добавлена автоматическая генерация дополнительных символов в идентификаторах столбцов, если они имеют значение VALUE или DESCRIPTION, для предотвращения ошибок сохранения - я так понимаю, это вот об этом речь.
 


как это убрать?
 
Гость, убрать никак.

А можно нескромный вопрос  :)  - зачем это убирать?

Это связано с тем, что если значение является массивом, и есть ключ VALUE в этом массиве, то битрикс возьмет значение при сохранении из ключа VALUE, а не сам массив. Поэтому вы получите только ошибку, если такой ключ будет существовать. Поэтому я и сделал добавление символов в конец идентификатора, если он VALUE или DESCRIPTION (для DESCRIPTION скорее просто на всякий случай, чем есть в этом реальная необходимость, т.к. в нем может передаваться описание к значению).
 
Тут все просто, жил сайт - база на 4 000 позиций элементов и их доп характеристик. В один прекрасный день (сегодня) надо было добавить еще одно значение в поле выбора. При этом (года назад где-то) запустили сайт и поля обозвали не иначе как - description и value. И все отображалось и работало пока я не залез добавить еще одно значение. Value и Description обновились. В результате стало невозможно отредактировать старые записи.
В результате я Ваш код несколько модифицировал. И теперь все ок. Я отдаю себе отчет в том, что это UID своего рода. Где я это исправил - Вы и сами знаете. сюда не выложу, без разрешения - не волнуйтесь.
 
Гость, да я не волнуюсь, выкладываю где править, если кому-то еще это понадобится  :)  

Правки в строке 169 файла /bitrix/modules/grain.tables/include.php:
Код

if(in_array(strtoupper(trim($v["NAME"])),Array("VALUE","DESCRIPTION"))) 

   
$v["NAME"] .= RandString(4,"abcdefghijklnmopqrstuvwxyz");
нужно заменить на
Код

if(in_array(trim($v["NAME"]),Array("VALUE","DESCRIPTION"))) 

   
$v["NAME"] .= RandString(4,"abcdefghijklnmopqrstuvwxyz");
т.е. убрать strtoupper.

Я просто думал что так вообще у вас ничего работать не будет, и долго не мог понять как вообще у вас это работало, но потом сообразил: у вас идентификатор в нижнем регистре - value, а проблема только если ввести идентификатор в верхнем регистре - VALUE. А я сгоряча запретил и value и VALUE :)
 
вот это то что надо, спасибо, дополните документацию пожалуйста для метода CIBlockElement::SetPropertyValuesEx

В общем я получил значение своего свойства($ob->GetProperties()) как:
Код

Array

(
    [
ID] => 36
    
[TIMESTAMP_X] => 2021-12-15 22:49:45
    
[IBLOCK_ID] => 12
    
[NAME] => Варианты билетов
    
[ACTIVE] => Y
    
[SORT] => 500
    
[CODE] => tickets_variants
    
[DEFAULT_VALUE] => Array
        (
            [
code] => 
            [
name] => 
            [
price] => 0
            
[stock_count] => 0
        
)

    [
PROPERTY_TYPE] => S
    
[ROW_COUNT] => 1
    
[COL_COUNT] => 30
    
[LIST_TYPE] => L
    
[MULTIPLE] => Y
    
[XML_ID] => 
    [
FILE_TYPE] => 
    [
MULTIPLE_CNT] => 5
    
[TMP_ID] => 
    [
LINK_IBLOCK_ID] => 0
    
[WITH_DESCRIPTION] => N
    
[SEARCHABLE] => N
    
[FILTRABLE] => N
    
[IS_REQUIRED] => N
    
[VERSION] => 1
    
[USER_TYPE] => gtable
    
[USER_TYPE_SETTINGS] => Array
        (
            [
COLUMNS] => Array
                (
                    [
0] => Array
                        (
                            [
NAME] => name
                            
[SORT] => 10
                            
[LANG] => Array
                                (
                                    [
ru] => Array
                                        (
                                            [
NAME] => Название
                                            
[TOOLTIP] => 
                                        )

                                    [
en] => Array
                                        (
                                            [
NAME] => 
                                            [
TOOLTIP] => 
                                        )

                                )

                            [
TYPE] => text
                            
[DEFAULT_VALUE] => 
                            [
SIZE] => 20
                        
)

                    [
1] => Array
                        (
                            [
NAME] => price
                            
[SORT] => 20
                            
[LANG] => Array
                                (
                                    [
ru] => Array
                                        (
                                            [
NAME] => Цена
                                            
[TOOLTIP] => 
                                        )

                                    [
en] => Array
                                        (
                                            [
NAME] => 
                                            [
TOOLTIP] => 
                                        )

                                )

                            [
TYPE] => text
                            
[DEFAULT_VALUE] => 0
                            
[SIZE] => 20
                        
)

                    [
2] => Array
                        (
                            [
NAME] => stock_count
                            
[SORT] => 30
                            
[LANG] => Array
                                (
                                    [
ru] => Array
                                        (
                                            [
NAME] => Остатки
                                            
[TOOLTIP] => 
                                        )

                                    [
en] => Array
                                        (
                                            [
NAME] => 
                                            [
TOOLTIP] => 
                                        )

                                )

                            [
TYPE] => text
                            
[DEFAULT_VALUE] => 0
                            
[SIZE] => 20
                        
)

                )

            [
PUBLIC_VIEW_TEMPLATE] => 
            [
PUBLIC_EDIT_TEMPLATE] => 
            [
ADMIN_VIEW_TEMPLATE] => 
            [
ADMIN_EDIT_TEMPLATE] => 
            [
INCLUDE_SCRIPTS] => 
        )

    [
HINT] => 
    [
PROPERTY_VALUE_ID] => Array
        (
            [
0] => 13530
            
[1] => 13531
        
)

    [
VALUE] => Array
        (
            [
0] => Array
                (
                    [
code] => 
                    [
name] => взрослый ребенок
                    
[price] => 1800
                    
[stock_count] => 10
                
)

            [
1] => Array
                (
                    [
code] => 
                    [
name] => взрослый ребенок 31 дек
                    
[price] => 2000
                    
[stock_count] => 10
                
)

        )

    [
DESCRIPTION] => Array
        (
            [
0] => 
            [
1] => 
        )

    [
VALUE_ENUM] => 
    [
VALUE_XML_ID] => 
    [
VALUE_SORT] => 
    [~
VALUE] => Array
        (
            [
0] => Array
                (
                    [
code] => 
                    [
name] => взрослый ребенок
                    
[price] => 1800
                    
[stock_count] => 10
                
)

            [
1] => Array
                (
                    [
code] => 
                    [
name] => взрослый ребенок 31 дек
                    
[price] => 2000
                    
[stock_count] => 10
                
)

        )

    [~
DESCRIPTION] => Array
        (
            [
0] => 
            [
1] => 
        )

    [~
NAME] => Варианты билетов
    
[~DEFAULT_VALUE] => Array
        (
            [
code] => 
            [
name] => 
            [
price] => 0
            
[stock_count] => 0
        
)

)
не принципиально важно, но я удалил перед этим столбец code в настройках инфоблока, но в значениях по умолчанию он почему-то остался.

И теперь формирую массив $new_value для обновления записи следующий:
Код

Array

(
    [
13530] => Array
        (
            [
VALUE] => Array
                (
                    [
code] => 
                    [
name] => взрослый ребенок
                    
[price] => 1800
                    
[stock_count] => 7
                
)

        )

    [
13531] => Array
        (
            [
VALUE] => Array
                (
                    [
code] => 
                    [
name] => взрослый ребенок 31 дек
                    
[price] => 2000
                    
[stock_count] => 10
                
)

        )

)
и обновляю
Код

CIBlockElement::SetPropertyValuesEx($product_id$IBLOCK_ID, ['tickets_variants' => $new_value]);

после чего всё прекрасно обновляется

спасибо разработчику за классный модуль, уже много лет пользуюсь, но вот иногда забываю как обновлять, оставлю это здесь для себя, если есть необходимость, обязательно раскручиваю на него заказчика)
Страницы: 1
Ответить
Читают тему
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки