Finar.ru
web.finar.ru
video.finar.ru
Темы для BootstrapNew!

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

Автор: Филипп Казаков | 2014-04-27 | просмотров 5072
Тэги

На днях мне пришлось поковыряться в исходниках 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.

Оставить комментарий 


Ваше имя:
->