в корзине 2 товара выводит 1

Главные вкладки

Аватар пользователя riaron777 riaron777 16 сентября 2022 в 11:53

в корзине 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;

  }
  }

?>

Комментарии

Аватар пользователя OldWarrior OldWarrior 16 сентября 2022 в 20:47
1

Вам бы подучить правила code style, да и английский, видимо, тоже не помешало. Тогда, возможно, кто-то и разберёт ваш код.

Аватар пользователя OldWarrior OldWarrior 16 сентября 2022 в 20:56

Подозреваю, что проблема здесь:

<?php
...
$node=$a[array_key_first($a)];
...
?>

Поскольку вы такой конструкцией (так же, как и прежним аналогом reset($a), который у вас не работал) получаете просто первый элемент из массива $a в единственном числе (т.е. $node не является уже массивом и count($node) тут уже просто не применим).

Аватар пользователя schnauss schnauss 16 сентября 2022 в 20:56
1

У меня ещё вопрос а зачем писать этот велосипед? Если это пет проект, то разбирайтесь сами, а если коммерческий то лучше сразу использовать commerce и сэкономить время всем

Аватар пользователя riaron777 riaron777 24 сентября 2022 в 22:21

так выводит ошибку 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;

  }

?>