Пишу модуль для отображения корзины

Аватар пользователя Riaron Riaron 17 августа в 12:21
<?php
use Drupal\user\Entity\User;

function 

hello_hello_world() {
  
$query = \Drupal::database()->insert('basket');
$query->fields([
  
'good_type' => 'notebook',
  
'article' => 1,
  
'price' => 600,
  
'user_name' => user,
  
'date' => time(),
]);
$query->execute();
}

function 

hello_welcome() {
 
$user User::load(\Drupal::currentUser()->id());
    
$query = \Drupal::database()->select('basket''nfd');
$query->fields('nfd', ['good_type''article','price''date']);
$query->condition('nfd.user_name''user');
$result $query->execute()->fetchAll();

return 

t($result[0]->user_name);
}
?>

Пишу модуль для отображения корзины столкнулся с проблемой
как вытаскивать значения из $result?

0 Thanks

Лучший ответ

Аватар пользователя Riaron Riaron 19 августа в 12:12

спасибо получил значение, но наткнулся на другую проблему, по отдельности $result[0]->article и др. показыает без проблем но вместе даже без html тегов выводит ошибку The website encountered an unexpected error. Please try again later.

<?php
$aa
="
<a> Тип Товара: 
$result[0]->good_type</a><br>
<a>Артикул: 
$result[0]->article</a><br>
<a>Дата: 
$result[0]->date</a><br>
<a>Цена: 
$result[0]->price</a><br>

 "

;
 return 
t($aa);
?>

Комментарии

Аватар пользователя ivnish ivnish 17 августа в 15:46

Не проще ли воспользоваться уже готовыми наработками, а не плодить "велосипеды"? Тот же basic_cart сейчас очень даже юзабелен

Аватар пользователя Orion76 Orion76 17 августа в 18:25

Да.
Как минимум, можно использовать выше предложенный модуль как образец и учебное пособие.
Drupal - OpenSource.
Т.е. исходники Drupal и его модулей полностью открыты для изучения.
Если задача не слишком "экзотическая", всегда можно найти готовое решение подобной задачи и подсмотреть реализацию.
Это не стыдно, и даже наоборот-)

Аватар пользователя Orion76 Orion76 18 августа в 11:14

переменная $query имеет класс: web/core/lib/Drupal/Core/Database/Query/Select.php
метод execute() возвращает объект, реализующий интерфейс: web/core/lib/Drupal/Core/Database/StatementInterface.php

Метод fethAll() данного объекта возвращает массив:

<?php
  
/**
   * >>>  Returns an array containing all of the result set rows. <<<
   *
   * @param $mode
   *   One of the PDO::FETCH_* constants.
   * @param $column_index
   *   If $mode is PDO::FETCH_COLUMN, the index of the column to fetch.
   * @param $constructor_arguments
   *   If $mode is PDO::FETCH_CLASS, the arguments to pass to the constructor.
   *
   * @return
   *   An array of results.
   */
  
public function fetchAll($mode NULL$column_index NULL$constructor_arguments NULL);
?>

Осталось только придумать, как вытащить значение из массива.

посмотреть структуру элемента массива можно так: var_dump($result[0]);

https://www.php.net/manual/ru/function.var-dump.php

Аватар пользователя sas@drupal.org sas@drupal.org 19 августа в 9:11

Если хотите писать модули и работать в т.ч. с db layer смотрите код рабочих модулей и лучше ядерных, в дополнение examples

Аватар пользователя Riaron Riaron 19 августа в 12:12

спасибо получил значение, но наткнулся на другую проблему, по отдельности $result[0]->article и др. показыает без проблем но вместе даже без html тегов выводит ошибку The website encountered an unexpected error. Please try again later.

<?php
$aa
="
<a> Тип Товара: 
$result[0]->good_type</a><br>
<a>Артикул: 
$result[0]->article</a><br>
<a>Дата: 
$result[0]->date</a><br>
<a>Цена: 
$result[0]->price</a><br>

 "

;
 return 
t($aa);
?>
Аватар пользователя Semantics Semantics 19 августа в 12:16

Во-первых, вы не должны таким образом формировать HTML
Во-вторых, вы не должны прогонять его через систему переводов
В-третьих, в Drupal 8 уже нет функции t()