Сэмплы полезного кода для компонентов NetCat фрагменты кода для популярного функционала компонентов NetCat

Компоненты - основные сущности, обеспечивающие функциональность сайта в NetCat. В них содержатся "поля", описывающие типы хранимых данных в таблице Базы Данных MySQL, формат представления этих полей, алгоритмы их взаимодействия. К компонентам привязываются "объекты" - наименее абстрактные сущности сайта. Именно их - статьи, голосования, комментарии, товары в каталоге - вы и видите в конечном итоге на сайте, они составляют его "контент".

Здесь собраны полезные кусочки кода, которые часто бывают нужны при программировании разнообразного функционала компонентов.

Системные настройки популярные приемы одной строкой

if ($id)$query_where = "Message_ID = $id"; // если передан ID, фильтровать выборку по нему
if ($commaSeparatedIDs) $query_where = "a.Message_ID IN ($commaSeparatedIDs)"; //если передана группа ID, разделенных запятыми, фильтровать выборку по ней
if ($action=='full'){ $ignore_check = 1; } // Отображать объект при полном выводе, даже если он выключен

Примеры кода компонентов для версии 4.x.x (слегка устаревшие примеры для начинающих)

Включение стороннего php-скрипта:

<!-- код включения -->
";
if ($admin_mode != true) { // если не в админке
chdir($DOCUMENT_ROOT.'/some_script/'); // меняем рабочую директорию на директорию скрипта
global $Foo; // объявляем $Foo глобальной
include_once("index.php"); // подключаем скрипт
chdir($DOCUMENT_ROOT); // возвращаемся в дефолтную директорию
}
$result .= "

$Foo //выводим значение $Foo, полученное в результате работы скрипта
<!-- /код включения -->

Код включает сторонний php-код в компонент NetCat. Кроме того, мы используем переменную $Foo, определяемую во включаемом скрипте, в дальнейшей работе в NetCat. Код включаемого php-скрипта не должен ничего выводить на экран, иначе он выполнится перед контентом компонента. Таким образом включаемый php-скрипт должен быть оформлен в виде функции, примерно с таким выводом:

 global $Foo;
 $Foo = some_final_result_function($Bar);
 return $Foo;

Выходим в PHP в форме добавления:

";
echo "<br>123";
$addForm .= "

Вывод первых N символов текста поля f_Preview в листинге объектов компонента:

";
$lenght1=strlen($f_Name);
if ($lenght1>63)
{
$length = strripos(substr($f_Name, 0, 63), ' ');
$phphsubstr = substr($f_Name, 0, $length)."...";
}
else
{
$phphsubstr = $f_Name;
}

$result.= "

$phphsubstr

Определение размера фотографии $f_image в листинге объекта:

";
$imageFileInfo = getimagesize($DOCUMENT_ROOT.$f_image);
echo $imageFileInfo[0];
echo $imageFileInfo[1];
echo "

Для действия после изменения/добавления: ресайзить картинку, но только уменьшая:

eval(listQuery("SELECT CustomSettings FROM Sub_Class WHERE Sub_Class_ID='$cc'","\$data[CustomSettings]"));
  global $nc_core;
  require_once($nc_core->INCLUDE_FOLDER."classes/nc_imagetransform.class.php");
 if ($_FILES[f_image][size]!=0 && $_FILES[f_image][type]!='')
  {
    $photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'image', "");
    $imageFileInfo = getimagesize($photo_path);
    if ($photo_path && $imageFileInfo[0] > 400 && $imageFileInfo[1] > 300) nc_ImageTransform::imgResize("$photo_path","$photo_path", 400, 300, 0, 'jpg', 90, $message, 'image');
  }

Объект в списке: выводим заголовок, только если s_list_class не пуст:

".($f_RowNum == 0 ? "<h4>Последние посты:</h4>
<ul>
<li><a href='$fullLink'>$f_Name</a><br/></li>
":"
".($f_RowNum == $endRow-1 ? "<li><a href='$fullLink'>$f_Name</a></li></ul>
":"<li><a href='$fullLink'>$f_Name</a></li>")."
")."

Если мы делаем s_list_class компонента, и не уверены, что под условия выборки попадет хоть один объект, можно вот так просто сэмулировать префикс объекта и суффикс объекта.

Объект в списке: делать что-то после каждого 4-го объекта:

".( ($f_RowNum+1)%4==0 ? "<div class='clear'></div>" : "")."

Регулируем количество объектов в списке в зависимости от длинны заголовков:
В префиксе списка объектов(обнуляем переменные на всякий случай):

";
$col=0;
$links='';
$result.= "

В объекте в списке(считаем количество символов в название объекта и если меньше заданной величины(у нас 260) формируем html код списка объектов ):

";
$col=$col+strlen($f_Name);
if ($col < '260') $links.="
<a href='$fullLink'>$f_Name</a>";
$result.= "

В суффиксе списка объектов(выводим html код списка объектов):

$links

Так же рекомендуется заполинить поле "Показывать по X объектов на странице", исходя из принципа максимально количество объектов которое может поместиться в блок в который мы выводим объекты, чтобы не обрабатывать все объекты.

Карта сайта в компоненте:

  ".s_browse_sub(0,$browse_map)." (в префикс)
Системные настройки:
$browse_map['prefix'] = "<ul>";
$browse_map['unactive'] = "<li><a href=%URL>%NAME</a>\".s_browse_sub(\$data[\$i][Subdivision_ID],\$browse_template).\"</li>";
$browse_map['active'] = "<li><a href=%URL>%NAME</a>\".s_browse_sub(\$data[\$i][Subdivision_ID],\$browse_template).\"</li>";
$browse_map['suffix'] = "</ul>";

s_list_class с нулевым параметром
Если написать s_list_class(0,425), где 425 - это номер любого компонента в любом разделе, то... точно не помню, но кажется это равносильно простому листингу компонента без учета разделов, компонентов, сайтов и т.д.

Руслан — 2011-09-13, 15:49

А не подскажите как png обрезать, меняю jpg на png, но в итоге у меня вместо прозрачности залитое чёрным цветом изображение?

nc_ImageTransform - это функция ядра NetCat. С вопросами по ее работе с 32 битным PNG лучше обратиться в техподдержку NetCat. И написать сюда ответ, если разберетесь с проблемой :)

Finar.

Блог

Как расставить запятые между тегами на CSS?

Иногда проще что-то сделать на чистом CSS, чем на серверной стороне. Например, расставить запятые между тегами. Попробуем разделить подчеркнутые теги-ссылки на чистом CSS.

далее

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

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

далее

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

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

далее

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

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

далее

Весь блог тут