Опубликовано пользователем dm
В базе данных drupal 7 есть текстовое поле (field_phone) используемое под номер телефона. Данные заносились без какой либо проверки и имеют совершенно различные написания телефонных номеров.
Возникла необходимость к привидению всех номеров телефонов к единому виду:
+7 (ХХХ) ХХХ-ХХХХ
Для запуска кода нормализации нужен модуль Devel. Код вставляем на странице devel/php
-
// Выбираем field_phone_value и entity_id из таблицы field_data_field_phone
-
// Формируем запрос
-
// SELECT f.entity_id AS entity_id, f.field_phone_value AS field_phone_value FROM field_data_field_phone f
-
$query = db_select('field_data_field_phone', 'f')
-
->fields('f', array('entity_id', 'field_phone_value'));
-
// ->condition('f.entity_id', 24, '<=');
-
$result = $query->execute();
-
-
foreach ($result as $ph) {
-
// Исходный номер телефона
-
$phone = $ph->field_phone_value;
-
// entity_id
-
$e_id = $ph->entity_id;
-
-
// Уберет любые знаки кроме цифр
-
$phone = preg_replace("#[^\d]#", "", $phone);
-
// Оставит последние 10 цифр начиная с конца строки
-
$phone = substr($phone, -10);
-
// Формируем шаблон +7 (ХХХ) ХХХ-ХХХХ
-
$area = substr($phone, 0,3);
-
$prefix = substr($phone,3,3);
-
$number = substr($phone,6,4);
-
$phone = "+7 (".$area.") ".$prefix."-".$number;
-
-
// Обновляем строки в БД
-
$query = db_update('field_data_field_phone')
-
->fields(array('field_phone_value' => $phone,))
-
->condition('entity_id', $e_id)
-
->execute();
-
}
-
-
// Выводим сообщение
-
drupal_set_message('Обновлено записей: ' . $result->rowCount());
Что бы новые пользователи сразу забивали номер телефона в нужном виде можно использовать модуль Masked Input позволяющий задать шаблон для номера телефона.
Может быть полезно: