Недокументированные функции NetCat 4.72

На днях пришлось поковыряться в исходниках NetCat 4.72, и по дороге обнаружились некоторые любопытные функции, о существовании которых мы не знали. И неудивительно, поскольку они не описаны в документации. Некоторые наиболее полезные собраны в этом посте.

Получить список подразделов раздела

  1. /**
  2.  * Получить идентификаторы всех подразделов раздела с идентификатором $sub
  3.  * @param int $sub идентификатор родительского раздела
  4.  * @return array массив с идентификаторами подразделов
  5.  *
  6.  */
  7. function nc_get_sub_children($sub) {
  8.     global $db;
  9.  
  10.     $array[] = $sub;
  11.     $sub_array = $db->get_col("SELECT `Subdivision_ID` FROM `Subdivision` WHERE Parent_Sub_ID = '".intval($sub)."'");
  12.  
  13.     if (!empty($sub_array)) {
  14.         foreach ($sub_array AS $key => $val) {
  15.             $array = array_merge($array, nc_get_sub_children($val));
  16.         }
  17.     }
  18.  
  19.     return $array;
  20. }

Визуализация массива

  1. /**
  2.  * Вывод массива в структурированном виде
  3.  * @param array массив для вывода
  4.  * @return bool true;
  5.  */
  6. function dump($var) {
  7.  
  8.     print "<hr><xmp>".print_r($var, 1)."</xmp><hr>";
  9.  
  10.     return true;
  11. }

Получить список дочерних макетов дизайна

Эта функция может быть полезна например для сайта с шаблонами NetCat, чтобы автоматически генерить список ссылок на все шаблоны. Или, скажем, чтобы для любого шаблона делать ссылку на его "мобильную версию", или упрощенную, или красненькую.

  1. /**
  2.  * Получить идентификаторы всех дочерних макетов для макета с идентификатором $template
  3.  * @param int $template идентификатор родительского макета
  4.  * @return array массив с идентификаторами макетов
  5.  *
  6.  */
  7. function nc_get_template_children($template) {
  8.     global $db;
  9.     $template = intval($template);
  10.     $array[] = $template;
  11.     $template_array = $db->get_col("SELECT `Template_ID` FROM `Template` WHERE `Parent_Template_ID` = '".$template."'");
  12.  
  13.     if (!empty($template_array)) {
  14.         foreach ($template_array AS $key => $val) {
  15.             $array = array_merge($array, nc_get_template_children($val));
  16.         }
  17.     }
  18.  
  19.     return $array;
  20. }

Падежи для существительных

  1. /*
  2.  * @quantity int число для которого выводим склонение
  3.  * @arForms  array  массив форм слова формата (единственное число, двойственное, множественное), например array('этаж','этажей','этажа') или ('а','','ы') для слова "Квартир".nc_numeral_inclination(20, array('этаж','этажей','этажа') )
  4.  */
  5.  
  6. function nc_numeral_inclination($quantity, $arForms) {
  7.  
  8.     $string = strval($quantity);
  9.     $len = strlen($string);
  10.  
  11.     if ($len > 1) {
  12.         $prev_last_digit = $string[$len - 2];
  13.     } else {
  14.         $prev_last_digit = 0;
  15.     }
  16.     $last_digit = $string[$len - 1];
  17.     if ($last_digit == 1 && $prev_last_digit != 1) {
  18.         return $arForms[0];
  19.     }
  20.  
  21.     if ($last_digit == 0 || ($prev_last_digit == 1 && $last_digit == 1) || (($prev_last_digit == 1)) || ($last_digit >= 5 && $last_digit <= 9)) {
  22.         return $arForms[1];
  23.     }
  24.  
  25.     if (($last_digit >= 2 && $last_digit <= 4) && !($quantity >= 11 && $quantity < 20)) {
  26.         return $arForms[2];
  27.     }
  28. }
Илья — 2014-04-28, 17:46

Я что-то не пойму, а как внутри функции nc_get_sub_children вызывается эта же функция(15 строка)

Это - рекурсивный вызов функции. Все подразделы данного раздела попадают в одномерный массив. Только вот с последовательностью видимо будут нелады - сначала первый уровень вложенности, потом - вложенные в первый не пустой раздел, потом во второй, и т.д., потом третий уровень вложенности начиная с первого непустого второго... В общем, изрядная каша :)

Finar.

Блог

Как отресайзить картинки батчем?

Все фотографии, которые вы собираетесь отресайзить, должны быть в одной директории, скажем «uploads». Внутри нее можно сохранить любую структуру директорий. Мы научимся создавать копию этой директории, внутри которой все картинки будут отресайзены, причем только в сторону уменьшения разрешения.

далее

Tilda Module: интеграция NetCat с Tilda.cc

Представляем нашу новую разработку, модуль интеграции CMS NetCat с платформой Tilda.cc. Модуль дает возможностью полуавтоматически размещать классные лендинги прямо в структуре вашего сайта!

далее

Как оптимально заархивировать файлы, чтобы распаковать их средствами ISPmanager?

В определенных случаях файлы выгоднее заливать на веб-сервер в виде архива. Во-первых, если данные хорошо сжимаются, или же просто файлов очень много, это сократит время заливки. Во-вторых, в любом случае это обезопасит данные от случайного повреждения, так как при распаковке архива происходит проверка его целостности с помощью контрольной суммы (CRC). Однако, не вполне понятно, какой формат архива и тип сжатия выбирать? Мы провели небольшое экспериментальное исследование на эту тему.

далее

Как расшифровать бэкапы, зашифрованные ISPmanager?

В ISPmanager версии 5.52.0 и старше, реализована новая система резервного копирования, построенная на основе некоей ISPtar. И работает она... своеобразно. Попробуем разобраться, как именно.

далее

Весь блог тут