Пятизвездочный рейтинг Cakephp с использованием плагина CakeDC

Я новичок. Я использую рейтинги CakeDC, чтобы получить звездный рейтинг на своем сайте. Мне удалось заставить его работать, но он отображает выбор радио.

И это показывает мне ошибку:

Неопределенная переменная: элемент

и После нажатия «Оценить» URL-адрес изменится на avis/post/view/redirect:1.

проблема

Я загружаю плагин и распаковываю в C:\wamp\www\avis\app\Plugin после того, как пишу CakePlugin::load('Ratings') в app/Config/bootstrap.php моя база данных

CREATE TABLE IF NOT EXISTS `posts` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(100) NOT NULL,
 PRIMARY KEY (`id`)
   ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;


  CREATE TABLE IF NOT EXISTS `ratings` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `user_id` char(36) NOT NULL DEFAULT '',
  `foreign_key` char(36) NOT NULL DEFAULT '',
  `model` varchar(100) NOT NULL DEFAULT '',
  `value` float NOT NULL,
   `created` datetime DEFAULT NULL,
   `modified` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
   KEY `rating` (`user_id`,`model`,`foreign_key`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

в пост модели

      public $hasMany = array(
       'Rating' => array(
        'className' => 'Rating',
        'foreignKey' => 'foreign_key',
        'dependent' => false,

        )
      );

в постконтроллере

  public $components = array('Paginator', 'Flash',    'Session','Ratings.Ratings');
           public $actsAs = array('Ratings.Ratable');

          public function index() {
    $this->Post->recursive = 0;
    $this->set('posts', $this->Paginator->paginate());
}

public function view($id = null) {
    if (!$this->Post->exists($id)) {
        throw new NotFoundException(__('Invalid post'));
    }
    $options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id));
    $this->set('post', $this->Post->find('first', $options));
}

с учетом

    <h2><?php echo __('Post'); ?></h2>
<dl>
    <dt><?php echo __('Id'); ?></dt>
    <dd>
        <?php echo h($post['Post']['id']); ?>
        &nbsp;
    </dd>
    <dt><?php echo __('Title'); ?></dt>
    <dd>
        <?php echo h($post['Post']['title']); ?>
        &nbsp;
    </dd>
    <?php 
echo $this->Rating->display(array(
    'item' => $post['Post']['id'],
'type' => 'radio',
'stars' => 5,
'value' => $item['rating'],
'createForm' => array(
    'url' => array(
        $this->passedArgs, 'rate' => $item['id'],
        'redirect' => true
    )
)
));
  ?>
   </dl>
 </div>  

<script>
            $('#ratingform').stars({
        split:2,
          cancelShow:false,
        callback: function(ui, type, value) {
    ui.$form.submit();
   }
   });
  </script>

person babyface    schedule 02.06.2016    source источник


Ответы (1)


  1. Сначала загрузите плагин Jquery Raty Js из: https://github.com/wbotelhos/raty
  2. Включите js, css в свой вид

    <div class="jrating" data-score="5"></div>
    <script> $('.jrating').raty({ score: function() {return $(this).attr('data-score');} });
    </script>

    Это создаст скрытое текстовое поле при публикации формы.

    На контроллере: $rating = $this->data['score']; Теперь вы можете сохранить рейтинг в своей таблице

person Akshay Sharma    schedule 03.06.2016