в корзине 2 товара выводит 1 в чем проблема?
<?php function shop_basket() {
$user = User::load(\Drupal::currentUser()->id());
$a=\Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'type' => 'basket',
'field_polzovatel'=>$user->getDisplayName()
]);
$node=$a[array_key_first($a)];
if(!count($node)){
$outp='Korzina pusta'.$count;
}elseif(count($node)>1){
$outp='Произошла ошибка свяжитесь с администрацией'.$count;
}elseif(count($node)==1){
foreach($node->get('field_artikuly') as $nodes){
$b=\Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'type' => 'product',
'field_articul'=>$nodes->value,
]);
$nid=$b[array_key_first($b)];
$price=$nid->get('field_cena')[0]->value;
$gg="
<tr>
<td>". $nodes->value."</td>
<td>".$nid->get('field_name')[0]->value."</td>
<td>".$price."</td>
<td><a href='dfbasket?article=".$nodes->value."'>Удалить</a></td>
</tr>";
$tt=$tt+$price;
$ww=$ww.$gg;
}
$b="<table>
<tr>
<td><p>Артикул</p></td>
<td><p>Нвзвание Товара</p></td>
<td><p>Цена</p></td>
<td></td>
<td><p>Итого</p></td>
</tr>";
$c="<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>".$tt."</td>
</tr>
</table>
<a href='atorders'>Заказать</a>
";
$outp=$b.$ww.$c;
}
return $outp;
}
}
?>
Комментарии
Вам бы подучить правила code style, да и английский, видимо, тоже не помешало. Тогда, возможно, кто-то и разберёт ваш код.
Подозреваю, что проблема здесь:
<?php
...
$node=$a[array_key_first($a)];
...
?>
Поскольку вы такой конструкцией (так же, как и прежним аналогом
reset($a)
, который у вас не работал) получаете просто первый элемент из массива$a
в единственном числе (т.е.$node
не является уже массивом иcount($node)
тут уже просто не применим).У меня ещё вопрос а зачем писать этот велосипед? Если это пет проект, то разбирайтесь сами, а если коммерческий то лучше сразу использовать commerce и сэкономить время всем
Да, верно.
У меня ощущение, что код выдран автором из другого велосипеда.
Осваиваю друпал 8/9
так выводит ошибку Call to a member function get() on array in shop_basket() внутри foreach на строке где $nodes
<?php function shop_basket(){
$user = User::load(\Drupal::currentUser()->id());
$node=count(\Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'type' => 'basket',
'field_polzovatel'=>$user->getDisplayName()
]));
if(!
$node){$outp='Korzina pusta'.$count;
}elseif($node>=1){
foreach(\Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'type' => 'basket',
'field_polzovatel'=>$user->getDisplayName()
])->get('field_artikuly') as $nodes){
$b=\Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'type' => 'product',
'field_articul'=>$nodes->value,
]);
$price=$b->field_cena->value;
$gg="
<tr>
<td>".$nodes->value."</td>
<td>".$b->field_name->value."</td>
<td>".$price."</td>
<td><a href='dfbasket?article=".$nodes->value."'>Удалить</a></td>
</tr>";
$tt=$tt+$price;
$ww=$ww.$gg;
}
$b="<table>
<tr>
<td><p>Артикул</p></td>
<td><p>Нвзвание Товара</p></td>
<td><p>Цена</p></td>
<td></td>
<td><p>Итого</p></td>
</tr>";
$c="<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>".$tt."</td>
</tr>
</table>
<a href='atorders'>Заказать</a>
";
$outp=$b.$ww.$c;
}
return $outp;
}
?>Подскажите $node должен возвращать 1 если в массиве хоть 100 объедков, а у меня возвращает 2