Fuze, к сожалению, как я и писал, не работает. Не знаю почему. Но хотя бы логика у меня была верная.
iDrevniy
Доброго дня!
Ситуация: в шаблоне поля выводятся не перебором массива, а напрямую:
<?php echo $profile['name']; ?> и так далее...
Есть поле, которое при таком варианте вывода отображается вот так:
{"data":"", "options":"1","content":"{...}"}
Если его выводить обычным перебором массива, то все отображается корректно (тэги и стили).
Пробовал:
<?php echo html($profile['field']); ?> // Не работает <?php echo $profile['field']['html']; ?> // Не работает
Как правильно вывести поле без перебора массива? Не хватает знаний и опыта.
Благодарю!
Доброго дня!
Постараюсь быть кратким. Почему эта конструкция работает:
<?php foreach($fields as $field) { ?> <div class="f_field"> В массиве больше нет элемента test. </div> <?php } ?>
А эта конструкция не работает. И как правильно удалить элемент из массива в данном случае?
<?php foreach($datasets as $dataset) { foreach($dataset['fields'] as $field) { ?> <div class="f_fields"> Элемент test не удален из массива. </div> <?php } } ?>
Мне просто не хватает знаний и опыта. Я пытался найти ответ в интернете, но видимо не правильно формулирую вопрос.
Я пробовал по-разному:
<?php foreach($datasets as $dataset) { foreach($dataset['fields'] as $field) { } ?> <div class="f_fields"> Элемент test не удален из массива. </div> <?php } } ?>
Не получается.
Благодарю.
Благодарю!
Ситуация: два ТК — Новости и Статьи. У ТК Новости я хочу изменить виджет комментариев, а именно то, что находится в файле tab_list.tpl.php.
Я думал в эту сторону:
<?php if($ctype_id == '1') { ?> для ТК Новости <?php } else { ?> для всех остальных ТК <?php } ?>
Но возникла загвоздка. В этом файле я не могу получить $ctype_id. Перепробовал сотню вариантов — не возвращается id в этом файле. Видимо запрос срабатывает до того как все рендерится.
Какие вообще есть варианты? Может все можно сделать проще?
Пробовал. Список не перемешивается. Я уже крутил тут как только можно.
Я пробовал использовать shuffle, но это для одномерных массивов — тут выдает ошибку.
Вопрос: можно ли в хуке написать собственную функцию перемешивания? Например что-то типа:
function myshuffle($arr) { // extract the array keys $keys = []; foreach ($arr as $key => $value) { $keys[] = $key; } // shuffle the keys for ($i = count($keys) - 1; $i >= 1; --$i) { $r = mt_rand(0, $i); if ($r != $i) { $tmp = $keys[$i]; $keys[$i] = $keys[$r]; $keys[$r] = $tmp; } } // reconstitute $result = []; foreach ($keys as $key) { $result[$key] = $arr[$key]; } return $result; }
Казалось бы все просто. Но для меня пока сложно. Не работает, ошибаюсь я где-то.
// Пробуем сделать рандомный датасет. $f_groups = $this->model->getFilteredGroups(); // Берем группы в настройках которых есть "Показывать в фильтре" foreach ($f_groups as $group) { //Перебираем полученный массив групп пользователей $datasets[''] = [ //Для каждый группы формируем массив датасет 'name' => $group['name'], //Название группы в качестве названия датасета 'title' => $group['title'], //Заголовок для страницы со списком пользователей 'filter' => function ($model, $dset) { //Теперь нужно все отфильтровать по модели (запросу к БД) и группе $table = 'users'; // Таблица с пользователями (без префикса или с префиксом - ничего не меняется) $this->model->joinQuery("(SELECT FLOOR(RAND() * (SELECT MAX(id) FROM cms_{$table})) AS id)", 'x', 'i.id >= x.id'); // Сложилось ощущение, что запрос к БД вообще не участвует в выдаче $model->orderBy('i.date_reg'); // Сортируем по дате регистрации (кажется тут ошибка, список всегда выстраивается в порядке регистрации по убфыванию) return $model->filterGroupByName($dset['name']); // Фильтруем результат по группе пользователей. } ]; }
То есть как я понимаю, даже если из БД я получаю рандомный список, то этот фильтр ($model->filterGroupByName($dset['name']);) возвращает все на свои места — по дате регистрации. Если удалить этот фильтр и оставить только return $model->filterGroupByName($dset['name']); — опять ничего не меняется.
Хелп ми плийз.
Всем доброго времени.
Помогите, пожалуйста, вот с каким вопросом. На странице списка всех пользователей есть наборы (Новые, Рейтинг, Онлайн, Популярные и Группы). Нужно, чтобы первоначальный список (например, Все — бывший Новые) сортировался по дате регистрации но не возрастанию или убыванию, а рандомно.
Как я понял, мне нужно что-то сделать с этой конструкцией:
'filter' => function ($model, $dset) { 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');. Но там еще куча всего в этой функции, которое я не совсем понимаю.
Как правильно сделать рандомную сортировку? Благодарю.
А заодно вопрос: как вывести список пользователей по набору Рейтинг или Популярные только для одной группы пользователей, например Новые? Благодарю!
Я пользуюсь TimeWeb. Компания 20 лет на рынке. Аптамй 100%. Недавно переделали админку 🔥. Крайне рекомендую!
pupsik если коротко — это система монетизации, коммерции, оплаты, обмена. Крутая система которая позволяет брать деньги с пользователей сайта за то что они пользуются его функциями. Но это очень грубо и приблизительно.
Подробнее тут: https://instantcms.ru/addons/billing2.html
И тут видео 1: https://youtu.be/GCQoQ1qLrQ4?si=eCQLzJMQ1Qk0M_G6
Тут видео 2: https://youtu.be/ePrVlGpZU04?si=yl7PVbaDps1Dog2Z
DRUID вы нашли проблемный участок! Подтверждаю: Если в настройках НЕ установлен тип контента по-умолчанию, то реф ссылка формируется и кука ставится, все работает. Проверил на нескольких сайтах.
Отчитываюсь. Установка была чистая — ночная сборка. Что было изменено: установлена дочерняя тема (чисто для css), отключены компоненты RSS, Группы, Лента активности, Стена, Тэги, Фотоальбомы. Добавлено два типа контента. Заведен пользоватьель с id2, чья реф ссылка и должна была распространяться.
Скачал из поста последний архив (2.18.0.2) и установил в автоматическом режиме. Все прошло без проблем. Реф ссылка выдает 404.
Может ошибка из-за того, что сайт стоит на тестовом домене (test.tw1.ru)?
Но кука тоже не ставится, потому что после перехода по реф ссылке и последующей регистрации реферал не появляется.
У меня нет идей.
Fuze, помните мы с вами тестировали ЮКассу на одном из моих доменов? Там все работает четко. Даже после обновления на 2.18.0.2.
Возможно по рефералам можно тему закрывать. Я сейчас попробую установить последний официальный релиз и обновиться.
ЗЫ
Вы спрашивали про компонент Конструктор форм — у меня все работает, огромное спасибо. Думаю оценю не только я. Единственное, нужно подкорректировать шаблон вывода если нет полей, чтобы не выводились пустые рамки — но это мелочи.
Я снова по рефералке. Кука тоже не ставится, либо работает некорректно. Итог: после перехода по реф ссылке ничего не происходит.
Доброго дня. Я пробовал запустить реферальную программу. Что бы я не делал переход по реф ссылке выдает 404. Кука вроде ставится, но лучше перепроверить.
Ставил последний архив.
Всем доброго дня. Подскажите что я делаю не так, пожалуйста.
Файл form_myfile.php (для примера). В нем генерирую форму:
class formMyform extends cmsForm { public $is_tabbed = true; public function init() { return array( array( 'type' => 'fieldset', ... ), array( 'type' => 'fieldset', ... ), ) }
Есть идея вывести fieldsets вкладками, поэтому добавил параметр public $is_tabbed = true;. Форма открывается в модальном окне и подгружается по факту клика по кнопке.
Вот как выглядит сгенерированная форма:
<div class="tabs-menu mb-3 form-tabs"> <ul class="nav nav-tabs flex-wrap"> <li class="nav-item"> <a class="nav-link active" href="#tab-0" data-toggle="tab" role="tab">Заголовок</a> </li> <li class="nav-item"> ... </li> </ul> <div class="tab-content"> <div id="tab-0" class="tab-pane">...</div> <div id="tab-1" class="tab-pane">...</div> <div id="tab-0" class="tab-pane">...</div> </div> </div>
То есть у пункта навигации по вкладкам есть класс active, а у содержимого этой вкладки почему-то его нет, соответственно, tab-0 при открытии формы не отображается. Нужно покликать по вкладкам, чтобы увидеть содержимое первой.
Как решить? Спасибо.