Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 952 Просмотров
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
На странице - условно несколько серых (неактивных) кнопок с подписями. Авторизовавшийся пользователь нажимает несколько из них - меняется их состояние (цвет), сохраняет, выходит - остальным видны изменения.
Уверен, это уже все придумано - как сформулировать запрос в поиске?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
на странице условно есть кнопки, клик на них сохраняет изменения их статуса в базе, при загрузке страницы берем статус в базе и меняем на активный класс

Уж простите, какой вопрос такой ответ.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
это я понимаю, но ни разу не писатель я кодов программных, мне бы готовое...
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
какое решение вы хотите - чтобы статусы кнопок хранились в базе, в куках, чтобы любой пользователь мог менять статусы в любое состояние или только один, где эти кнопки должны находиться, кто их может видеть, кто имеет доступ к редактированию
Увы, готовый код на основе вашего задания никто не даст от слова никогда.
По сути это коммерческое решение, для которого требуется четкое ТЗ.

Я могу набросать пример кода для всего этого, но куда и как вы его будете вставлять тоже вопрос )) уж простите, не с целью издевки, но действительно недостаточно информации
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Кнопки находятся в материале, страница с уровнем доступа Паблик. Видна всем. Авторизованный пользователь (уровень от Registered) может изменить состояние кнопки и сохранить его. Хранение - в базе, хотелось бы реализовать в  виде вставки кода в материал статьи (так наверное проще организовать права на доступ?)
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Изменить состояние кнопки может любой авторизованный пользователь?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Хм, если хотите могу ближе к вечеру набросать пример функционала подобного, вам потребуется доступ к базе данных, чтобы создать таблицу для моего примерного кода
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
хорошо. спасибо. Доступ есть, таблицу создам
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Набросал вам примерный вариант, можно это собрать в отдельный модуль, но не стал, для наглядности понимания
Для работы потребуется подключенная библиотека jQuery, далее пошагово с кодом
1 - в папке \templates\ваш шаблон\html\mod_custom создать файл testbtn.php (в кодировке UTF-8) следующего содержания
Код
<?php
defined('_JEXEC') or die;

$db = JFactory::getDBO();
$query = 'select * from #__testbtn';
$db->setQuery($query);
    $rows = $db->loadObjectList();

    // если юзер авторизован - добавим класс позволяющий менять статус
    $user = JFactory::getUser();
    $js_class = '';
    if ($user->id) {
    $js_class = 'js_testbtn';
    }

?>
<div class="testbtn_wrapper">
<?php foreach ($rows as $row) {
if ($row->status == '1') {
        $status = 'active';
} else {
        $status = 'noactive';
}
?>
<a href="#" class="<?php echo $js_class; ?> testbtn <?php echo $status; ?>"
data-status="<?php echo $row->status; ?>"
data-id="<?php echo $row->id; ?>"
>
<?php echo $row->title; ?></a>
<?php } ?>
<div class="testbtn_result"></div>
</div>

2 - в вашем файле где всякий JS код пишите (внутри объекта jquery), в блоке $.ajax({ параметр url дописываете название своего шаблона вместо моей заглушки
Код
		$(document).on('click', '.js_testbtn', function() {
        // сразу переключим класс
        $(this).toggleClass('active');
        // получим ID и новый статус объекта
        var thisstatus = $(this).attr('data-status');
        var thisid = $(this).attr('data-id');
        // проверим текущий статус и изменим на противоположный, можно и на сервере делать
        var newstatus = '';
        if (thisstatus == 0) {
            newstatus = 1;
        } else {
            newstatus = 0;
        }
        $(this).attr('data-status', newstatus);
    // соберем в массив наши данные
    var fd = new FormData();
    fd.append('newstatus', newstatus);
    fd.append('thisid', thisid);
        // отправим на сервер и получим ответ
        $.ajax({
        url: 'templates/ваш шаблон/ajax.php',
        data: fd,
        contentType:false,
        processData:false,
        type:'POST',
        success: function(response){
                // выведем сообщение
                $('.testbtn_result').text('Статус кнопки с ID "'+ thisid +'" обновлен, новый: '+thisstatus);
        }
    });
        });

3 - в корневую папку шаблона кладете файл AJAX.php (в нижнем регистре, это форум меняет автоматом, регистр важен!) с кодом
Код
<?php
// подключим фреймворк движка
define( '_JEXEC', 1 );

header('Content-Type: text/html; charset=utf-8');

if ( file_exists( __DIR__ . '/defines.php' ) ) {
    include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
    define( 'JPATH_BASE', __DIR__ . '/../../' );
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';

    // получим данные
$id = JRequest::getVar( 'thisid', '', 'post' );
$status = JRequest::getVar( 'newstatus', '', 'post' );

    // обновим в базе
    $db = JFactory::getDBO();
$query = '
update #__testbtn
set status = "'.$status.'"
where id = '.$id.'
';
$db->setQuery( $query );
$db->query();

?>

4 - (необязательно) немного стилей для оформления
Код
/* test btn */
.testbtn {
display: inline-block; margin: 0 20px 0 0;
padding: 10px 15px; text-align: center;
background: #002b41; color: #fff;
}
.testbtn:hover {
background: #002b41; color: #fff;
}
.testbtn.active {
background: #fe2a00; color: #000;
}
.testbtn_result {
margin: 30px 0 0 0;
}

5 - в базе данных создаете таблицу с данными кнопок (в режиме sql запроса просто выполнить код)
Код
CREATE TABLE `jt_testbtn` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `status` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `jt_testbtn`
--

INSERT INTO `jt_testbtn` (`id`, `title`, `status`) VALUES
(1, 'Тестовая кнопка 1', 0),
(2, 'Тестовая кнопка 2', 0);

6 - создаете в админке модуль типа произвольный HTML, публикуете в нужной позиции, в настройках модуля в вкладке "дополнительные параметры" указываете шаблон testbtn

Все, теперь в указанной позиции будут выводиться кнопки исходя из количества записей в нашей таблице БД. Если статус 0 - значит типа неактивна, будет черная по умолчанию. Гости ничего менять не могут. Любой зарегистрированный юзер при клике сразу меняет отображение стиля кнопки и отправляет запрос в БД на изменение статуса.
0 - неактивно
1 - активно
Под кнопками есть пустой блок для текста возращаемого результата, как пример работы.
« Последнее редактирование: 23.11.2018, 20:25:32 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Благодарю! Буду посмотреть, по результату - отпишусь.
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
P.S. забыл уточнить, на 5-м шаге SQL запроса заменить префикс таблиц на свой
jt_
на
вашпрефикс_
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
это догадался, заменил. в ajax-e  jquery запрос идет update #__testbtn - два подчеркивания надо? не срабатыват скрипт, в базу запросы не идут.
В шаблоне shaper_helixultimate хитростей никаких ведь нет? JS код вставил и в файлы в папке js в папке шаблона, и в сам шаблон - есть возможность кастомный js вставить - не срабатывает скрипт
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
TypeError: $ is not a function[Подробнее] main.js:138:1
<анонимная>
http://*******************/shaper_helixultimate/js/main.js:138:1
TypeError: $ is not a function[Подробнее] predmety:38:1
<анонимная>
http://*******************/index.php/predmety:38:1
TypeError: $ is not a function[Подробнее] jquery.min.js:6:9
<анонимная>
http://*******************/media/jui/js/jquery.min.js:6:9
dispatch
http://*******************/media/jui/js/jquery.min.js:2:44051
add/v.handle
http://*******************/media/jui/js/jquery.min.js:2:40822

во всех файлах, куда навтыкал код - одна и та же ошибка в консоли, отладчик выводит на первую строку js из примера
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
jquery подключен до пользовательского JS?
Нонконфликт подключен?
Запрос не срабатывает потому что js не отрабатывает, не передает запрос на сервер в обработчик

#__testbtn - два подчеркивания надо?
все правильно, это api движка
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
https://yadi.sk/i/18TFOtvoLZL1FA
скриншот кода страницы

да, все подключено и раньше пользовательского js
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
нонконфликт скорей всего
Попробуйте запихнуть весь JS код в отдельный файл (подключить его в индексе шаблона ниже подключения jquery)
и завернуть его в обертку
Код
(function( $ ){
   // мой код тут
})( jQuery );

Если не поможет - дайте в личку или в скайп (в подписи) доступ к ftp сайта, посмотрю что там может быть не так
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
подключил отдельным файлом с изменениями - заработало!
Большое спасибо! В карму плюсануть не могу - не хватает сообщений, но большое человеческое спасибо!
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Для кармы вроде бы требовалось 10+ сообщений раньше.
Но все равно рад что помог, пользуйтесь
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

muzzy76

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
пишет - надо 20, в правилах (специально сходил посмотреть) - 25
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
пишет - надо 20, в правилах (специально сходил посмотреть) - 25
Значит давно не смотрел правила, последнее время редко здесь активно пишу
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Функционал для конкурса

Автор Гонсалес

Ответов: 2
Просмотров: 681
Последний ответ 02.06.2018, 22:30:44
от Гонсалес
Всплывающие окна при на ведении на кнопки

Автор DonDno

Ответов: 4
Просмотров: 1232
Последний ответ 18.02.2016, 15:08:42
от Cherish
Смена фонового изображения при наведении на пункт меню

Автор Incazzato

Ответов: 2
Просмотров: 899
Последний ответ 28.01.2016, 14:38:35
от Incazzato
Реализовать функционал

Автор umagadji

Ответов: 2
Просмотров: 853
Последний ответ 21.08.2015, 17:23:45
от Aponte
Социальные кнопки сбоку

Автор saintnameless

Ответов: 18
Просмотров: 5062
Последний ответ 18.06.2015, 17:47:41
от vipiusss