Задать вопрос
@Parsifal31017
Программист

Как вывести проекты построчно, а не коллекцией?

У меня выводится коллекцией, а нужно вывести построчно каждый отдельный проект отдельно поле названия отдельно сайт, отдельно теги, И так далее без лишних полей.
6122773d0c926356364841.png
<div>
  <h1>
    {{ Lang::choice('projects.works', 1) }}
  </h1>
  @if($project ?? '' )
  <x-project id="{{ $project['id'] }}" />
  @endif
  <ul class="projects-menu">
  <li class="projects-menu-item">
    <p class="projects-menu-link">
    {{ $projects }}
    </p>
  </li>
</ul>
</div>

<?php
namespace App\View\Components;
use App\Models\Project;
use Illuminate\View\Component;
use Illuminate\Database\Eloquent\Collection;
class Projects extends Component
{
    public Collection $projects;
    public array $tags = [];
    public $tag;

    public function __construct()
    {
        $this->projects = Project::select('id')->published()->get();
        $this->tags[] = [
            'name' => __('projects.all_projects'),
            'slug' => 'all',
        ];
        $project = Project::where('id', 1)
               ->take(10)
               ->get();
        foreach ($this->projects as &$project) {
            $tags = $project->tags()->get();
            foreach ($tags as &$tag)
                $this->tags[] = [
                    'name' => $tag->name,
                    'slug' => $tag->slug,
                ];
        }
    }

    public function render()
    {
        foreach ($this->projects as &$project) {
            echo ( $projects ?? '');
            echo ( $tags ?? '');
          }
        return view('components.projects')
        ->with('projects', $projects ?? '')
        ->with('tags', $tags ?? '');
    }
}

<?php
namespace App\View\Components;
use App\Models\Project as ModelsProject;
use Illuminate\View\Component;
class Project extends Component
{
    public $project;

    public function __construct($id)
    {
        $project = Project::where('id', 1)->take(10)->get();
    }

    public function render()
    {
        foreach ($this->projects as &$project) {
            echo ( $project ?? '');
          }

        return view('components.project.solid')
        ->with('project')
        ->with('colors');
    }
}

@if($project)
<div style="background: {{ $colors[0] }}">
  @if (!is_null($project->url))
    <span>{{ $project->present()->urlHost() }}</span>
  @endif
  @if (!is_null($project->url))
    <a href="{{ $project->url }}" target="_blank" class="stretched-link"></a>
  @endif
</div>
@endif

Заранее спасибо
  • Вопрос задан
  • 125 просмотров
Подписаться Простой 10 комментариев
Решения вопроса 1
pLavrenov
@pLavrenov
Разработка сайтов
1) Убрать логику из конструктора
2) В ларавеле разделены понятия шаблон и контроллер (как и везде наверное), это значит что надо передать данные в шаблон а потом уже выводить их через foreach
3) Как можно вообще писать такое?
$projects ?? ''
если предполагается что там должен быть массив то и там должен быть пустой массив а не пустая строка. В сишарпе же покруче вроде с типизацией....
4) Получение тегов. Project::with('tags') так можно получить сразу с отношениями. И не надо это все перебирать в массив, зачем если в шаблоне можно сразу получить то что надо и вывести.
5) При таком подходе к тегам если у проектов будут одинаковые теги то они будут добавлены 2-3-4 раза смотря в скольки проектах будет.
6) Получение 10 проектов с ID == 1? Точно Сишарп Программист?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы