Класс Dat

Класс для создания новых записей в блоке, а также для обновления и извлечения записей. Записи хранятся в таблицах определяемых массивом $types в tdd-файле. Методы класса работают единовременно только с одной записью.

Во всех методах класса применяется параметры:

  • $blockInfo — параметры блока. Это массив с двумя элементами ['src-block-id'=>..., 'tpl'=>...], в качестве значений которых берутся, соответственно, номер исходного блока и имя шаблона. Этот массив можно получить с помощью метода Blox::getBlockInfo(), но использоваться будут только два элемента, упомянутые выше.

    Достаточно указывать только один из элементов: 'src-block-id' или 'tpl' — недостающий элемент будет вычислен системой. Но есть одно исключение — допустимо опускать элемент 'src-block-id' только в том случае, если известно, что данный шаблон назначен только одному блоку. Если известны оба элемента, рекомендуется использовать оба.

  • $xprefix — префикс переменных дескриптора (строка). Если передается "x", то метод будет применяется к экстраданным.

Dat::insert($blockInfo, $dat=null, $xprefix=null, $tdd=null)

Метод для создания новой записи.

  • Возвращает данные записи в формате переменной шаблона $dat (массив).

  • $blockInfo — параметры блока (массив). Подробности см. в начале статьи.

  • $dat — данные, которые нужно внести в запись сразу во время ее создания (массив). Формат номерПоля=>значение. Возможно также задание числа полю сортировки: 'sort'=>значение. Эти данные перебивают значения по умолчанию, прописанные в массиве $defaults дескриптора.

  • $xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.

  • $tdd (необязательный параметр) — массив всех переменных дескриптора. Если вне метода уже есть эта переменная, то желательно ее передать параметром в данный метод.

В виду того, что при вызове метода Dat::insert() производится сложная цепочка изменений, аналогичного метода Dat::replace() не существует. Вместо него пользуйтесь кодом:

if (Dat::get($blockInfo, ['rec'=>1])) {
    Dat::update($blockInfo, [2=>'новый'], ['rec'=>1]);
} else {
    Dat::insert($blockInfo, [2=>'новый']);
}

Dat::get($blockInfo, $wdat, $xprefix=null)

Метод для извлечения одной записи.

  • Возвращает данные записи, аналогичные массиву $dat в переменных шаблона (массив). В доп. ключе 'sort' массива находится данное из поля сортировки.

  • $blockInfo — параметры блока (массив). Подробности см. в начале статьи.

  • $wdat — ключевые данные (массив). Массив для формирования запроса WHERE в sql выражении. Ключами массива являются номера полей и 'rec'

  • $xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.

  1. Пример

    $dat2 = Dat::get(['src-block-id'=>$srcBlockId, 'tpl'=>'shop_nav'], ['rec'=>$recId]);
    
  2. Извлечь экстраданные текущего блока в дескрипторе (.tdd)

    $xdat2 = Dat::get($blockInfo, [], 'x');

    В случае получения экстраданных, номер строки в ключевых данных можно не указывать, или указать ['rec'=>1], так как там для данного блока всегда находится только одна строка

Dat::update($blockInfo, $dat, $wdat, $xprefix=null)

Метод для изменения данных в одной записи.

  • Возвращает true или false.

  • $blockInfo — параметры блока (массив). Подробности см. в начале статьи.

  • $dat — данные, которые подлежат изменению (массив). Формат номерПоля=>значение. Возможно также изменение поля сортировки: 'sort'=>значение

  • $wdat — ключевые данные. Массив для формирования запроса WHERE в sql выражении. Ключами массива являются номера полей и 'rec'

  • $xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.

Dat::delete($blockInfo, $wdat, $xprefix=null)

Метод для удаления одной записи.

  • Возвращает true или false.

  • $blockInfo — параметры блока (массив). Подробности см. в начале статьи.

  • $wdat — ключевые данные. Массив для формирования запроса WHERE в sql выражении. Ключами массива являются номера полей и 'rec'

  • $xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.

Если в удаляемой записи имеются block-данные, картинки и другие спецданные, то данный метод не подойдет, так как он просто удаляет запись из таблицы базы данных, не затрагивая связанных данных. В таких случаях применяйте метод Admin::deleteRec().


Примечания

  • При обращении к базе данных с помощью методов класса Dat, все данные автоматически параметризуются, поэтому никаких специальных мероприятий по защите от sql-инъекций делать не нужно. О параметризации можно узнать подробнее в статье Класс Sql. В той же статье даны универсальные методы работы с таблицами базы данных, в которых, правда, приходится специально параметризовать данные и следить за их типом, в отличие от методов класса Data.


См. также