Разработка своего дополнения

InstantCMS 2.X

Разработка своего дополнения

#1 8 июня 2023 в 11:53

всем мира!
Подскажите я вот сделал своё дополнение для движка, проверил на своём сайте на openserver вроде всё работает, так как это первое дополнение которое я сделал (нужно было для своего сайта) и понятно что скорей всего многое неправильно написал в коде  то нужно что бы его как то проверить на правильный код, на безопасность и так далее, есть ли тут модератор котором можно было бы отправить для проверки или только тут в блоге вставлять ?

#2 8 июня 2023 в 12:05

я вот сделал своё дополнение для движка

No Name

С почином )

скорей всего многое неправильно написал в коде

No Name

Обычное явление, тут почти все такими делами занимаются )) (шутка). Главное что работает.

есть ли тут модератор котором можно было бы отправить для проверки или только тут в блоге вставлять ?

No Name

Модераторов таких нет и вряли появятся. На проверку самого движка, как первой, так и второй версии, народ собирал складчину и отправляли специалисту. А с личными разработками складчину врядли будут собирать, поэтому в большинстве случаев правильность кода вообще не смотрят, а за безопасность отвечает только совесть самого разработчика.

#3 8 июня 2023 в 13:55

А так базово проверьте, что все данные, получаемые от пользователя, или нигде не выводятся, или обрабатываются, чтобы не пустить в базу лишнее, или выводятся на сайте безопасным образом, например, с помощью функции html()

#4 8 июня 2023 в 14:49

про складчину не понял )) мне просто что бы знающий человек сказал что в правильном направлении делается в плане безопасность и всё!(что бы установить на свой сайт и не беспокоится что что то не правильно)(там дополнение то простое пара запросов базу)

вот например вам просто могу отправить что бы глянули или нет? или нужно блог писать тут и выкладывать :?

#5 8 июня 2023 в 15:05

там дополнение то простое пара запросов базу

No Name

Ну так выложите код. Может кто что и подскажет.

#6 8 июня 2023 в 16:39

Отправьте, посмотрю, может подскажу что нибудь 

#7 8 июня 2023 в 19:03

 My-InstantCMS.Ru, ок напишу в личку спасибо

#8 9 июня 2023 в 05:40

 No Name, посмотрел дополнение, для первого раза очень хорошо, продолжайте в том же духе)

Есть некоторые моменты в коде, где я бы сделал по другому, например:

В файле system\fields\rximgo.php не нужны методы hookAfterAdd и hookAfterRemove они и так выполняются в таком же виде, что есть сейчас.

В методе parse вы получаете объект core потом из request получаете ctype_name и slug, что бы получить текущий запись.

  1. $inCore = cmsCore::getInstance();
  2. $content_model = $inCore->getModel('content');
  3. $current_item = $content_model->getContentItemBySLUG($inCore->request->get('ctype_name'), $inCore->request->get('slug'));
  4. $url_item = $inCore->uri;
  5.  
  6. $my_zapros_tip_contetna = 'con_'.$inCore->request->get('ctype_name');
  7. $my_get_str = ($content_model->getItemById($my_zapros_tip_contetna,
  8. $current_item['id']))['rx_user_iamgo'];

Не нужны такие сложности, так как текущий запись уже есть в этом методе, просто обращайтесь так

  1. $this->item['ctype_name']; // имя типа контента
  2. $this->item['id']; // ID записи
  3. $this->item['title']; // Заголовок записи
  4. $this->item['rx_user_iamgo']; или $value; // Значение вашего поля

В файле system\controllers\rxcontroller\actions\addamgomer.php

Данные о текущем пользователей получаете так cmsUser::get('is_logged') или cmsUser::get('id')

Лучше получать так

  1. $this->cms_user->is_logged; // авторизован или нет
  2. $this->cms_user->is_admin; // админ или нет
  3. $this->cms_user->id; // ID текущего пользователя
  4. $this->cms_user->nickname; // ник пользователя

Так же вы создаете объект модели контента cmsCore::getModel('content') и обращаетесь в getItemById

Данный метод общий и можно обращаться с любой модели, поэтому лучше создайте свой файл model.php или объект

  1. $model = new cmsModel();


 Еще заметил, что везде используете insertOrUpdate, хотя update ни разу не было, поэтому лучше использовать insert

В файле templates\modern\controllers\rxcontroller\fild_rx_imgo.tpl.php есть такой неправильный код

  1. <div style="width: 50px;height: 50px;float: left;margin: 5px;">
  2. <a href="/users/<?php echo $users_model->getUser($user_go)['id']; ?>"
  3. title="<?php echo $users_model->getUser($user_go)['nickname']; ?>">
  4. <?php if(!empty($users_model->getUser($user_go)['avatar'])){
  5. $user_avatar = $users_model->getUser($user_go)['avatar'];
  6. echo html_avatar_image($user_avatar, 'small', $user->nickname);
  7. } else {
  8. echo html_avatar_image_empty($users_model->getUser($user_go)['nickname'], 'embed-responsive-item');
  9. } ?>
  10. </a>
  11. </div>

Этот код выполняется в массиве списка пользователей и для каждого пользователя вы выполняете 5 запроса что бы получить id, nickname, avatar

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

  1. <?php $user = $users_model->getUser($user_go); ?>
  2. <div style="width: 50px;height: 50px;float: left;margin: 5px;">
  3. <a href="<?php echo href_to('users', $user['id']); ?>"
  4. title="<?php echo $user['nickname']; ?>">
  5. <?php if(!empty($user['avatar'])){
  6. $user_avatar = $user['avatar'];
  7. echo html_avatar_image($user_avatar, 'small', $user->nickname);
  8. } else {
  9. echo html_avatar_image_empty($user['nickname'], 'embed-responsive-item');
  10. } ?>
  11. </a>
  12. </div>

Но всё же не советую в tpl файлах использовать запросы на базу, это лучше сделать в файле system\fields\rximgo.php

В этом же файле выводить иконки полностью с <svg></svg> не надо, для этого есть удобный метод

  1. <?php html_svg_icon('solid', 'minus-circle'); ?>

В остальном всё нормально, обращайтесь если возникнут вопросы

#9 9 июня 2023 в 07:35

 My-InstantCMS.Ru, большое спасибо за оценку моего первого дополнения ) и спасибо за указанные ошибки, щас буду внимательно всё читать и изучать! Спасибо что находите время для объяснения )

1. не нужны методы hookAfterAdd и hookAfterRemove? немного не понял, а как же без них мне создать и удалить дополнительное поле в базе данный ?
ведь метод   hookAfterRemove как выполняется при удалении основного поля
2. Но всё же не советую в tpl файлах (поправил вынес из шаблона) — а на что это может влиять ?
всё остальное поправил, спасибо

#10 9 июня 2023 в 08:40

1. не нужны методы hookAfterAdd и hookAfterRemove? немного не понял, а как же без них мне создать и удалить дополнительное поле в базе данный ?

No Name

Если доп поле объявлено в $cache_sql, то оно создается и удаляется автоматически. hookAfterAdd и hookAfterRemove нужны если создаете несколько полей в БД или нужны данные по создаваемой записи.

2. Но всё же не советую в tpl файлах (поправил вынес из шаблона) — а на что это может влиять ?
всё остальное поправил, спасибо

No Name

Со временем файлов шаблонов может появиться немалое количество, да ещё и разбросано будет по папкам разных шаблонов. И если вы захотите добавить/изменить структуру  или каким-то образом обработать выводимые данные, вам надо будет бегать по всем этим файлам шаблонов и везде менять. А когда вся логика получения данных содержится в одном месте то это будет проще в обслуживании. Поэтому получение и обработку данных отделяют от файлов шаблонов. В файлах шаблонов надо стараться выводить только html-разметку с переменными. Чтобы сторонний верстальщик смог спокойно переверстать под свой шаблон, не заморачиваясь с получением и обработкой данных.

#11 9 июня 2023 в 08:46

hookAfterAdd и hookAfterRemove нужны если создаете несколько полей в БД или нужны данные по создаваемой записи.

Loadырь

да у меня именно так, $cache_sql  не используется

#12 9 июня 2023 в 13:07

да у меня именно так, $cache_sql  не используется

No Name

Если не поняли этот момент, изучите поле Город, там сначала создается поле, имя которого задаете в админке, например city, еще параллельно создается city_cache, который хранить текстовое названия города. Для таких полей или если ваше поле использует несколько ячеек в таблице, надо в hookAfterAdd и hookAfterRemove создать/удалить

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.