Отправка данных в базу без перезагрузки страницы

InstantCMS 2.X
#1 1 октября 2017 в 01:17
Друзья есть ли в самом движке какой то обработчик jquery или скрипт который сможет обработать данные сразу занести в базу.
Например есть кнопка которая будет отправлять в базу +1 (increment) и user_id то кто нажал как можно это сделать. Спасибо!
#2 1 октября 2017 в 01:38


ajax

Странник

Да знаю с ajax, но не хочу брать сторонние функции а как то например кнопка лайка сделать.
#3 1 октября 2017 в 01:40
ajax не сторонная функция, а встроенная в jquery. если вы используете jquery, у вас доступ к ajax имеется уже.
#4 1 октября 2017 в 01:52

Друзья есть ли в самом движке какой то обработчик jquery или скрипт который сможет обработать данные сразу занести в базу.

Нико
писать свой action для обработки запроса придется вам — несколько строк кода.
#5 1 октября 2017 в 02:12


Друзья есть ли в самом движке какой то обработчик jquery или скрипт который сможет обработать данные сразу занести в базу.

Нико
писать свой action для обработки запроса придется вам — несколько строк кода.

@SmartControl

Понятно, а есть ли какой нибудь пример что бы упираться ему и переписать как то?
#6 1 октября 2017 в 02:20
Нико, изменение кармы, например. Экшн можно подсмотреть в консоли, поменяв карму.
Ну а как работать с ajax на jquery лучше почитать в интернете…

Схема —
1. добавить аякс запрос при клике на что-то, который будет вызывать экшн компонента
2. в экшене добавить вызов метода модели
3. в модели прописать нужные изменение в БД
#7 1 октября 2017 в 02:22


Нико, изменение кармы, например. Экшн можно подсмотреть в консоли, поменяв карму.
Ну а как работать с ajax на jquery лучше почитать в интернете…

Схема —
1. добавить аякс запрос при клике на что-то, который будет вызывать экшн компонента
2. в экшене добавить вызов метода модели
3. в модели прописать нужные изменение в БД

@SmartControl

Спасибо будет мне точно тяжело, ставлю себе задачу теперь делать )
#8 1 октября 2017 в 12:25


@SmartControl,

  1.  
  2. <script src="jquery.min.js" type="text/javascript"></script>
  3.  
  4. <div class="buttons15">
  5. <button name = "button16" class="button16"><?php echo LANG_SPORT_FOLLOW; ?></a>
  6. </div>
  7.  
  8.  
  9. </div>
  10.  
  11.  
  12. <script language="javascript" type="text/javascript">
  13. $('.button16').click( function() {
  14.  
  15. $.ajax({
  16. type: 'POST',
  17. url: 'response.php?action=sample2',
  18. data: 'name=Andrew&nickname=Aramis',
  19. success: function(data){
  20. $('.results').html(data);
  21. }
  22. });
  23.  
  24. });
  25.  
  26. </script>
  27.  
  28. <div class="results">Ждем ответа</div>
  29.  

Нико

  1. <?php
  2.  
  3. switch ($_REQUEST['action']) {
  4. case 'button16':
  5. echo 'Пример 2 - передача завершилась успешно. Параметры: name = ' . $_POST['name'] . ', nickname= ' . $_POST['nickname'];
  6. break;
  7. $aRes = array('name' => 'Andrew', 'nickname' => 'Aramis');
  8.  
  9. }
  10.  
  11. ?>
  12.  
В простом пхп знаю как делать и у меня работает но вот на этом движке ни как не пойму как подключить =(
#9 1 октября 2017 в 12:54
  1. Добавил пока экшен
  2.  
  3. class actionSportsTeamFollow extends cmsAction {
  4. public function run($id = false){
  5. if (!cmsUser::isLogged()) { cmsCore::error404(); }
  6. if (!$this->request->isAjax()){ cmsCore::error404(); }
  7. $user = cmsUser::getInstance();
  8. $follow = array(
  9. 'user_id' => $user->id,
  10. 'profile_id' => $profile_id
  11. );
  12. $sport_follow_team_add = $this->model->addSportsFollowTeam($follow);
  13. return $this->cms_template->renderJSON(array(
  14. 'error' => $sport_follow_team_add ? false : true
  15. ));
  16. } }
  17.  
  18. model.php
  19. /* Follow Team */
  20. public function getSportsFollowTeam($id){
  21. $sport_follow_team['sport_follows_team'] = $this->get('sport_follow');
  22. return $sport_follow_team;
  23. }
  24. public function addSportFollowTeam($follow){
  25. return $this->insert('sport_follow', $follow);
  26. }
  27. public function updateSportFollowTeam($id){
  28. return $this->update('sport_follow', $id);
  29. }
  30.  
#10 1 октября 2017 в 13:24
@SmartControl, Все сдаюсь дальше не знаю facepalm
#11 1 октября 2017 в 13:50
  1. <script language="javascript" type="text/javascript">
  2. var icms = icms || {};
  3.  
  4. icms.users = (function ($) {
  5.  
  6. this.karmaUp = function(){
  7. this.karmaVote('up');
  8. return false;
  9. };
  10.  
  11. this.karmaVote = function(direction){
  12.  
  13. var block = $('#user_profile_rates');
  14. var url = block.data('url');
  15. var is_comment = block.data('is-comment');
  16. var comment = '';
  17.  
  18.  
  19. var value = $('.karma .value', block).html();
  20.  
  21. $('.karma .value', block).addClass('loading-icon').html('');
  22. $('.karma .thumb', block).hide();
  23.  
  24. $.post(url, {direction: direction, comment: comment}, function(result){
  25.  
  26. if (result == null || typeof(result) == 'undefined' || result.error){
  27. icms.users.error(result.message);
  28. $('.karma .thumb', block).show();
  29. $('.karma .value', block).removeClass('loading-icon').html(value);
  30. return;
  31. }
  32.  
  33. $('.karma .value', block).
  34. removeClass('loading-icon').
  35. removeClass('zero').
  36. removeClass('positive').
  37. removeClass('negative').
  38. addClass(result.css_class).
  39. html(result.value);
  40.  
  41. $('.karma .thumb', block).remove();
  42.  
  43. }, 'json');
  44.  
  45. };
  46.  
  47. this.error = function(message){
  48. if (message) { icms.modal.alert(message); }
  49. this.enableStatusInput(false);
  50. };
  51.  
  52. this.delete = function(link, title){
  53. icms.modal.openAjax(link, {}, false, title);
  54. };
  55.  
  56. return this;
  57.  
  58. }).call(icms.users || {},jQuery);
  59.  
  60. </script>


  1.  
  2. <div class="buttons15">
  3. <div id="user_profile_rates"
  4. data-url="<?php echo $this->href_to('team_follow', 1); ?>">
  5. <div class="karma block">
  6. <a href="#vote-up" onclick="return icms.users.karmaUp()" class="thumb thumb_up button16"><?php echo LANG_SPORT_FOLLOW; ?></a>
  7. </div>
  8. </div>
  9. </div>
#12 1 октября 2017 в 21:31

В простом пхп знаю как делать и у меня работает но вот на этом движке ни как не пойму как подключить =(

Нико
Плохой движок, не используйте его. Делайте на "простом пхп" если знаете как!

@SmartControl, Все сдаюсь дальше не знаю

Нико
Неправильно, надо писать "@SmartControl жду от вас готовый код для копипасты"

Нико, ну реально вы постоянно задаете элементарные вопросы и не воспринимаете подсказки вообще! А ждёте когда вам напишут готовый код.
Ajax-запрос элементарнейшая технология (ок, сама технология не так проста, но на jQuery это просто как раз, два, три). Откройте любую из миллиона статей в интернете изучите что да как и тупо делайте по инструкции! Если вы не хотите учиться тогда не стоит засорять здесь форум, а если хотите развиваться — так учитесь и развивайтесь!
#13 1 октября 2017 в 21:41


В простом пхп знаю как делать и у меня работает но вот на этом движке ни как не пойму как подключить =(

Нико
Плохой движок, не используйте его. Делайте на "простом пхп" если знаете как!

@SmartControl, Все сдаюсь дальше не знаю

Нико
Неправильно, надо писать "@SmartControl жду от вас готовый код для копипасты"

Нико, ну реально вы постоянно задаете элементарные вопросы и не воспринимаете подсказки вообще! А ждёте когда вам напишут готовый код.
Ajax-запрос элементарнейшая технология (ок, сама технология не так проста, но на jQuery это просто как раз, два, три). Откройте любую из миллиона статей в интернете изучите что да как и тупо делайте по инструкции! Если вы не хотите учиться тогда не стоит засорять здесь форум, а если хотите развиваться — так учитесь и развивайтесь!

Val

Я вам честно скажу, я многому научился делать самому из за вашей помощи если бы не вы я бы вообще не знал бы как это делается тем более у нас в стране нету школы этого типа редко где найдешь, из за это всем вам огромное спасибо честно. Но если по теме я правда не могу понять смысл без подсказок, вот я нашел в инете как это вывести но на чистом тупо пхп теперь мне нужно как то на движке сделать. Я не могу перевести код на инстант просто не пойму.
#14 1 октября 2017 в 23:28

Я не могу перевести код на инстант просто не пойму.

Нико
Да там не сильно отличается от чистого php, Пример небольшой для компонента sport

1. добавляете action во frontend компонента — actionIncrement(){} — можно без параметров. Потому что юзера вы и в нем получите через $this->cms_user->id. И вызываете там метод модели, который меняет базу $this->model->incrementSport($this->cms_user->id);. Соответственно в модели прописываете этот метод
2. в jquery делаете запрос к URL /sport/increment

если через ajax отправляются какие-то данные, то их можно получить в action через
  1. $param1 = $this->request->get('param1');
  2. $param2 = $this->request->get('param2');
#15 2 октября 2017 в 00:32


Я не могу перевести код на инстант просто не пойму.

Нико
Да там не сильно отличается от чистого php, Пример небольшой для компонента sport

1. добавляете action во frontend компонента — actionIncrement(){} — можно без параметров. Потому что юзера вы и в нем получите через $this->cms_user->id. И вызываете там метод модели, который меняет базу $this->model->incrementSport($this->cms_user->id);. Соответственно в модели прописываете этот метод
2. в jquery делаете запрос к URL /sport/increment

если через ajax отправляются какие-то данные, то их можно получить в action через
  1. $param1 = $this->request->get('param1');
  2. $param2 = $this->request->get('param2');

@SmartControl

Вот так ?

  1. class sports extends cmsFrontend {
  2.  
  3. public function actionIncrement(){
  4. $this->model->incrementSport($this->cms_user->id);
  5.  
  6. $param1 = $this->request->get('param1');
  7. $param2 = $this->request->get('param2');
  8.  
  9. }
  10. }
model.php
  1. public function incrementSport($id){
  2. return $this->update('sport_follow', $id);
  3. }

  1. <?php $this->addJS('templates/default/js/sports.js'); ?>
  2.  
  3. <div class="buttons15">
  4. <div id="user_profile_rates"
  5. data-url="<?php echo $this->href_to('team_follow', 1); ?>">
  6. <div class="karma block">
  7. <a href="#vote-up" onclick="return icms.users.karmaUp()" class="thumb thumb_up button16"><?php echo LANG_SPORT_FOLLOW; ?></a>
  8. <?php foreach ($sport_follow_team as $follow){ ?>
  9. <span class="value <?php echo html_signed_class($follow['points']); ?>" title="<?php echo LANG_KARMA; ?>">
  10. <?php echo html_signed_num($follow['points']); ?>
  11. </span>
  12. <?php } ?>
  13. </div>
  14. </div>
  15.  
  16. </div>
  1. var icms = icms || {};
  2.  
  3. icms.users = (function ($) {
  4.  
  5. this.karmaUp = function(){
  6. this.karmaVote('up');
  7. return false;
  8. };
  9.  
  10. this.karmaVote = function(direction){
  11.  
  12. var block = $('#user_profile_rates');
  13. var url = block.data('url');
  14. var is_comment = block.data('is-comment');
  15. var comment = '';
  16.  
  17.  
  18. var value = $('.karma .value', block).html();
  19.  
  20. $('.karma .value', block).addClass('loading-icon').html('');
  21. $('.karma .thumb', block).hide();
  22.  
  23. $.post(url, {direction: direction, comment: comment}, function(result){
  24.  
  25. if (result == null || typeof(result) == 'undefined' || result.error){
  26. icms.users.error(result.message);
  27. $('.karma .thumb', block).show();
  28. $('.karma .value', block).removeClass('loading-icon').html(value);
  29. return;
  30. }
  31.  
  32. $('.karma .value', block).
  33. removeClass('loading-icon').
  34. removeClass('zero').
  35. removeClass('positive').
  36. removeClass('negative').
  37. addClass(result.css_class).
  38. html(result.value);
  39.  
  40. $('.karma .thumb', block).remove();
  41.  
  42. }, 'json');
  43.  
  44. };
  45.  
  46. this.error = function(message){
  47. if (message) { icms.modal.alert(message); }
  48. this.enableStatusInput(false);
  49. };
  50.  
  51. this.delete = function(link, title){
  52. icms.modal.openAjax(link, {}, false, title);
  53. };
  54.  
  55. return this;
  56.  
  57. }).call(icms.users || {},jQuery);
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.