Недокументированные функции 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.

Блог

Что с Мастерхостом? Когда заработает?!

Этот вопрос всё чаще задают в Интернете начиная примерно с 12:00 дня 2 марта. А всё потому, что он накрылся!

далее

Автоматизированная Система Управления Бэкапами

Автоматизированная Система Управления Бэкапами позволяет добиться полного контроля над резервными копиями сайтов внутри инфраструктуры веб-студии. Если вы поддерживаете десятки сайтов на разных хостингах, без подобной системы вы не можете быть на 100% уверены в том, что каждый из них был корректно зарезервирован прошлой ночью.

далее

WebSocket: интеграция с NetCat

Хотите добавить на сайт под управлением CMS NetCat поддержку технологии WebSocket? Обращайтесь к нам! Посетители сайта смогут получать мгновенные уведомления о событиях сайта без обращений к серверу и перезагрузок страниц. Превратите свой сайт в интерактивную площадку, работающую в реальном времени!

далее

NetCat: техническая поддержка и доработка сайтов

Мы работаем с CMS NetCat уже больше 10 лет. У нас большой опыт и ответственный подход к делу.

далее

Весь блог тут