iDrevniy

iDrevniy

+1 в карму :) Спасибо!
+42
Репутация
83
Рейтинг
#1 Как удалить элемент массива? 7 ноября 2025 в 12:09

 Fuze, к сожалению, как я и писал, не работает. Не знаю почему. Но хотя бы логика у меня была верная.

#1 Как правильно вывести поле? 7 ноября 2025 в 12:03

Доброго дня!

Ситуация: в шаблоне поля выводятся не перебором массива, а напрямую:

  1. <?php echo $profile['name']; ?>
  2. и так далее...

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

  1. {"data":"", "options":"1","content":"{...}"}

Если его выводить обычным перебором массива, то все отображается корректно (тэги и стили).

Пробовал:

  1. <?php echo html($profile['field']); ?> // Не работает
  2. <?php echo $profile['field']['html']; ?> // Не работает

Как правильно вывести поле без перебора массива? Не хватает знаний и опыта.

Благодарю!

#1 Как удалить элемент массива? 7 ноября 2025 в 11:52

Доброго дня!

Постараюсь быть кратким. Почему эта конструкция работает:

  1. <?php
  2. unset($fields['test']);
  3. foreach($fields as $field) {
  4. ?>
  5. <div class="f_field">
  6. В массиве больше нет элемента test.
  7. </div>
  8. <?php } ?>

А эта конструкция не работает. И как правильно удалить элемент из массива в данном случае?

  1. <?php
  2. unset($fields['test']);
  3. foreach($datasets as $dataset) {
  4. foreach($dataset['fields'] as $field) {
  5. ?>
  6. <div class="f_fields">
  7. Элемент test не удален из массива.
  8. </div>
  9. <?php } } ?>

Мне просто не хватает знаний и опыта. Я пытался найти ответ в интернете, но видимо не правильно формулирую вопрос.

Я пробовал по-разному:

  1. <?php
  2. foreach($datasets as $dataset) {
  3. unset($dataset['fields']['test']);
  4. foreach($dataset['fields'] as $field) {
  5. } ?>
  6. <div class="f_fields">
  7. Элемент test не удален из массива.
  8. </div>
  9. <?php } } ?>

Не получается.

Благодарю.

#4 Как изменить отображение виджета комментариев для типа контента? 20 октября 2025 в 11:53

Благодарю!

#1 Как изменить отображение виджета комментариев для типа контента? 20 октября 2025 в 00:18

Ситуация: два ТК — Новости и Статьи. У ТК Новости я хочу изменить виджет комментариев, а именно то, что находится в файле tab_list.tpl.php.

Я думал в эту сторону:

  1. <?php if($ctype_id == '1') { ?>
  2. для ТК Новости
  3. <?php } else { ?>
  4. для всех остальных ТК
  5. <?php } ?>

Но возникла загвоздка. В этом файле я не могу получить $ctype_id. Перепробовал сотню вариантов — не возвращается id в этом файле. Видимо запрос срабатывает до того как все рендерится.

Какие вообще есть варианты? Может все можно сделать проще?

#6 Хук для списка пользователей 16 октября 2025 в 22:17

Пробовал. Список не перемешивается. Я уже крутил тут как только можно.

Я пробовал использовать shuffle, но это для одномерных массивов — тут выдает ошибку.

Вопрос: можно ли в хуке написать собственную функцию перемешивания? Например что-то типа:

  1. function myshuffle($arr)
  2. {
  3. // extract the array keys
  4. $keys = [];
  5. foreach ($arr as $key => $value) {
  6. $keys[] = $key;
  7. }
  8.  
  9. // shuffle the keys
  10. for ($i = count($keys) - 1; $i >= 1; --$i) {
  11. $r = mt_rand(0, $i);
  12. if ($r != $i) {
  13. $tmp = $keys[$i];
  14. $keys[$i] = $keys[$r];
  15. $keys[$r] = $tmp;
  16. }
  17. }
  18.  
  19. // reconstitute
  20. $result = [];
  21. foreach ($keys as $key) {
  22. $result[$key] = $arr[$key];
  23. }
  24.  
  25. return $result;
  26. }
#7 Хук для списка пользователей 16 октября 2025 в 19:57

Казалось бы все просто. Но для меня пока сложно. Не работает, ошибаюсь я где-то.

  1. // Пробуем сделать рандомный датасет.
  2.  
  3. $f_groups = $this->model->getFilteredGroups(); // Берем группы в настройках которых есть "Показывать в фильтре"
  4.  
  5. foreach ($f_groups as $group) { //Перебираем полученный массив групп пользователей
  6. $datasets[''] = [ //Для каждый группы формируем массив датасет
  7. 'name' => $group['name'], //Название группы в качестве названия датасета
  8. 'title' => $group['title'], //Заголовок для страницы со списком пользователей
  9. 'filter' => function ($model, $dset) { //Теперь нужно все отфильтровать по модели (запросу к БД) и группе
  10. $table = 'users'; // Таблица с пользователями (без префикса или с префиксом - ничего не меняется)
  11. $this->model->joinQuery("(SELECT FLOOR(RAND() * (SELECT MAX(id) FROM cms_{$table})) AS id)", 'x', 'i.id >= x.id'); // Сложилось ощущение, что запрос к БД вообще не участвует в выдаче
  12. $model->orderBy('i.date_reg'); // Сортируем по дате регистрации (кажется тут ошибка, список всегда выстраивается в порядке регистрации по убфыванию)
  13. return $model->filterGroupByName($dset['name']); // Фильтруем результат по группе пользователей.
  14. }
  15. ];
  16. }
  17.  

То есть как я понимаю, даже если из БД я получаю рандомный список, то этот фильтр ($model->filterGroupByName($dset['name']);) возвращает все на свои места — по дате регистрации. Если удалить этот фильтр и оставить только return $model->filterGroupByName($dset['name']); — опять ничего не меняется.

Хелп ми плийз.

#1 Хук для списка пользователей 13 октября 2025 в 22:45

Всем доброго времени.

Помогите, пожалуйста, вот с каким вопросом. На странице списка всех пользователей есть наборы (Новые, Рейтинг, Онлайн, Популярные и Группы). Нужно, чтобы первоначальный список (например, Все — бывший Новые) сортировался по дате регистрации но не возрастанию или убыванию, а рандомно.

Как я понял, мне нужно что-то сделать с этой конструкцией:

  1. 'filter' => function ($model, $dset) {
  2. return $model->orderBy('i.date_reg', 'desc');

И вроде бы все просто — нужно заменить desc на rand, но система не знает, что такое rand.

Посмотрел виджет списка контента, там рандом реализован черз запрос к БД $model->joinQuery("(SELECT FLOOR(RAND() * (SELECT MAX(id) FROM cms_{$table})) AS id)", 'x', 'i.id >= x.id');. Но там еще куча всего в этой функции, которое я не совсем понимаю.

Как правильно сделать рандомную сортировку? Благодарю.

А заодно вопрос: как вывести список пользователей по набору Рейтинг или Популярные только для одной группы пользователей, например Новые? Благодарю!

#9 [ЕСТЬ РЕШЕНИЕ] Хостинг для InstantCMS 3 октября 2025 в 11:19

Я пользуюсь TimeWeb. Компания 20 лет на рынке. Аптамй 100%. Недавно переделали админку 🔥. Крайне рекомендую!

#10 Внедрение Биллинга в InstantCMS 14 сентября 2025 в 16:09

pupsik если коротко — это система монетизации, коммерции, оплаты, обмена. Крутая система которая позволяет брать деньги с пользователей сайта за то что они пользуются его функциями. Но это очень грубо и приблизительно.

Подробнее тут: https://instantcms.ru/addons/billing2.html
И тут видео 1: https://youtu.be/GCQoQ1qLrQ4?si=eCQLzJMQ1Qk0M_G6
Тут видео 2: https://youtu.be/ePrVlGpZU04?si=yl7PVbaDps1Dog2Z

#11 Внедрение Биллинга в InstantCMS 14 сентября 2025 в 12:15

DRUID вы нашли проблемный участок! Подтверждаю: Если в настройках НЕ установлен тип контента по-умолчанию, то реф ссылка формируется и кука ставится, все работает. Проверил на нескольких сайтах.

#12 Внедрение Биллинга в InstantCMS 13 сентября 2025 в 17:27

Отчитываюсь. Установка была чистая — ночная сборка. Что было изменено: установлена дочерняя тема (чисто для css), отключены компоненты RSS, Группы, Лента активности, Стена, Тэги, Фотоальбомы. Добавлено два типа контента. Заведен пользоватьель с id2, чья реф ссылка и должна была распространяться.

Скачал из поста последний архив (2.18.0.2) и установил в автоматическом режиме. Все прошло без проблем. Реф ссылка выдает 404.
Может ошибка из-за того, что сайт стоит на тестовом домене (test.tw1.ru)?

Но кука тоже не ставится, потому что после перехода по реф ссылке и последующей регистрации реферал не появляется.

У меня нет идей.

Fuze, помните мы с вами тестировали ЮКассу на одном из моих доменов? Там все работает четко. Даже после обновления на 2.18.0.2.

Возможно по рефералам можно тему закрывать. Я сейчас попробую установить последний официальный релиз и обновиться.

ЗЫ

Вы спрашивали про компонент Конструктор форм — у меня все работает, огромное спасибо. Думаю оценю не только я. Единственное, нужно подкорректировать шаблон вывода если нет полей, чтобы не выводились пустые рамки — но это мелочи.

#13 Внедрение Биллинга в InstantCMS 13 сентября 2025 в 07:16

Я снова по рефералке. Кука тоже не ставится, либо работает некорректно. Итог: после перехода по реф ссылке ничего не происходит.

#14 Внедрение Биллинга в InstantCMS 12 сентября 2025 в 20:27

Доброго дня. Я пробовал запустить реферальную программу. Что бы я не делал переход по реф ссылке выдает 404. Кука вроде ставится, но лучше перепроверить.

Ставил последний архив.

#1 [ЗАКРЫТО] Fieldsets во вкладках 29 августа 2025 в 23:28

Всем доброго дня. Подскажите что я делаю не так, пожалуйста.

Файл form_myfile.php (для примера). В нем генерирую форму:

  1. class formMyform extends cmsForm {
  2.  
  3. public $is_tabbed = true;
  4.  
  5. public function init() {
  6.  
  7. return array(
  8. array(
  9. 'type' => 'fieldset',
  10.  
  11. ...
  12.  
  13. ),
  14.  
  15. array(
  16. 'type' => 'fieldset',
  17.  
  18. ...
  19.  
  20. ),
  21. )
  22.  
  23. }
  24.  

Есть идея вывести fieldsets вкладками, поэтому добавил параметр public $is_tabbed = true;. Форма открывается в модальном окне и подгружается по факту клика по кнопке.

Вот как выглядит сгенерированная форма:

  1. <div class="tabs-menu mb-3 form-tabs">
  2.  
  3. <ul class="nav nav-tabs flex-wrap">
  4. <li class="nav-item">
  5. <a class="nav-link active" href="#tab-0" data-toggle="tab" role="tab">Заголовок</a>
  6. </li>
  7. <li class="nav-item">
  8. ...
  9. </li>
  10. </ul>
  11.  
  12. <div class="tab-content">
  13. <div id="tab-0" class="tab-pane">...</div>
  14. <div id="tab-1" class="tab-pane">...</div>
  15. <div id="tab-0" class="tab-pane">...</div>
  16. </div>
  17.  
  18. </div>

То есть у пункта навигации по вкладкам есть класс active, а у содержимого этой вкладки почему-то его нет, соответственно, tab-0 при открытии формы не отображается. Нужно покликать по вкладкам, чтобы увидеть содержимое первой.

Как решить? Спасибо.

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.