Класс для создания новых записей в блоке, а также для обновления и извлечения записей. Записи хранятся в таблицах определяемых массивом $types в tdd-файле. Методы класса работают единовременно только с одной записью.
Во всех методах класса применяется параметры:
$blockInfo — параметры блока. Это массив с двумя элементами ['src-block-id'=>..., 'tpl'=>...]
, в качестве значений которых берутся, соответственно, номер исходного блока и имя шаблона.
Этот массив можно получить с помощью метода Blox::getBlockInfo(), но использоваться будут только два элемента, упомянутые выше.
Достаточно указывать только один из элементов: 'src-block-id' или 'tpl' — недостающий элемент будет вычислен системой. Но есть одно исключение — допустимо опускать элемент 'src-block-id' только в том случае, если известно, что данный шаблон назначен только одному блоку. Если известны оба элемента, рекомендуется использовать оба.
$xprefix — префикс переменных дескриптора (строка). Если передается "x", то метод будет применяется к экстраданным.
Метод для создания новой записи.
Возвращает данные записи в формате переменной шаблона $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 в переменных шаблона (массив). В доп. ключе 'sort' массива находится данное из поля сортировки.
$blockInfo — параметры блока (массив). Подробности см. в начале статьи.
$wdat — ключевые данные (массив). Массив для формирования запроса WHERE в sql выражении. Ключами массива являются номера полей и 'rec'
$xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.
Пример
$dat2 = Dat::get(['src-block-id'=>$srcBlockId, 'tpl'=>'shop_nav'], ['rec'=>$recId]);
Извлечь экстраданные текущего блока в дескрипторе (.tdd)
$xdat2 = Dat::get($blockInfo, [], 'x');
В случае получения экстраданных, номер строки в ключевых данных можно не указывать, или указать ['rec'=>1], так как там для данного блока всегда находится только одна строка
Метод для изменения данных в одной записи.
Возвращает true или false.
$blockInfo — параметры блока (массив). Подробности см. в начале статьи.
$dat — данные, которые подлежат изменению (массив). Формат номерПоля=>значение. Возможно также изменение поля сортировки: 'sort'=>значение
$wdat — ключевые данные. Массив для формирования запроса WHERE в sql выражении. Ключами массива являются номера полей и 'rec'
$xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.
Метод для удаления одной записи.
Возвращает true или false.
$blockInfo — параметры блока (массив). Подробности см. в начале статьи.
$wdat — ключевые данные. Массив для формирования запроса WHERE в sql выражении. Ключами массива являются номера полей и 'rec'
$xprefix — префикс переменных дескриптора. Подробности см. в начале статьи.
Если в удаляемой записи имеются block-данные, картинки и другие спецданные, то данный метод не подойдет, так как он просто удаляет запись из таблицы базы данных, не затрагивая связанных данных. В таких случаях применяйте метод Admin::deleteRec().
При обращении к базе данных с помощью методов класса Dat, все данные автоматически параметризуются, поэтому никаких специальных мероприятий по защите от sql-инъекций делать не нужно. О параметризации можно узнать подробнее в статье Класс Sql. В той же статье даны универсальные методы работы с таблицами базы данных, в которых, правда, приходится специально параметризовать данные и следить за их типом, в отличие от методов класса Data.