В статье (товаре), где будет использоваться виджет по задумке туда буду передавать id статьи (товара). Где будут выставляться сами звездочки создаю объект класса PHP: <? new \app\widgets\star_reiting\StarReiting($product->id); ?> Сам вопрос. Если мне нужно получить id, то в методах класса по моей задумке (код ниже) везде получается надо писать параметр этот $id или все же можно без него обойтись, объявив скажем в конструкторе private $private-tovar=$id её использовать? Может есть другой вариант, получше. Я только начинаю в этом разбираться и нужна подсказка (помощь) PHP: class StarReiting{ protected $tpl; protected $reiting; // текущий рейтинг статьи public function __construct($id){ $this->tpl=__DIR__.'/star_reitng_tpl/reiting.php'; $this->run($id); } protected function run($id){ self::getReiting($id); echo $this->getHtml(); } public static function getReiting($id){ } // Метод формирования html разметки public function getHtml(){ // Чтоб не выводилось, а вернулось в переменную // используем буферизацию ob_start ob_start(); require_once $this->tpl; return ob_get_clean(); }}
Искал много различных плагинов, но больше по душе оказался скрипт (плагин) - https://habr.com/ru/post/132807/ (третий вариант) Но вот незадача, я никак не могу передать данные $_POST в контроллер. Обычно я бы вызывал $('#rating_3').on('click', function() { $.ajax({ url: 'reiting/star', type: 'POST', success: function () { }, error: function () { alert('Ошибка! Попробуйте позже'); } }); }); Где reiting является контроллером ReitingController (так разработана MVC структура), а star соответственно его методом starAction() Если я так напишу, то ошибки не будет. Но при попытке просто вывести $_POST или же какое-либо окно alert-ом, то ничего не вижу. И в консоли нет ошибок и так ничего не выводится. Как же быть? Может кто сможет помочь?
здесь вы просто инициализируете объект и все, никакого рейтинга вы не получите. если я правильно понял нужно примерно следующее: Код: <? $rating = new StarReiting($product->id); echo $rating->getHtml(); ?> Код: <?php class StarReiting { protected $id; public function __construct($id) { $this->id = $id; } protected function getReiting($id) { // реализация получение рейтинга } public function getHtml() { $rating = $this->getReiting($this->id); // возвращаем вьюшку передав туда рейтинг $rating return // ...; } }
Привет. Пробуй использовать свойство класса для сохранения идентификатора товара и потом обращаться к нему внутри методов, не передавая его в параметрах. Для этого нужно объявить свойство класса и установить его значение в конструкторе: PHP: class StarReiting{ protected $tpl; protected $reiting; // текущий рейтинг статьи protected $id; // идентификатор товара public function __construct($id){ $this->tpl=__DIR__.'/star_reitng_tpl/reiting.php'; $this->id = $id; $this->run(); } protected function run(){ self::getReiting(); echo $this->getHtml(); } public static function getReiting($id){ // использование $this->id вместо параметра $id } // Метод формирования html разметки public function getHtml(){ // Чтоб не выводилось, а вернулось в переменную // используем буферизацию ob_start ob_start(); require_once $this->tpl; return ob_get_clean(); }} Обрати внимание, что в методе getReiting() нужно обращаться к свойству $this->id, а не использовать параметр $id. Также, в конструкторе вы можете объявить свойство как private, чтобы оно не было доступно извне: private $id;