Closed Szzng closed 2 years ago
<select>
태그와 <svg>
태그 내용 주석처리
layout.blade.php
파일 상단 마지막 <link>
태그 아래로 가기
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
붙여넣기
다시 header파일로 돌아와서
주석처리한 부분에 추가하기
<button>Categories</button>
에 click 이벤트 달기
<button @click="show = ! show">
*안될경우 @click=" alert('hi')"
로 실행되는지 확인
스타일 및 배경 클릭 시 드롭다운 show옵션 false 적용, 주석처리 제거
<div x-data="{ show: false }" @click.away="show = false"> <button @click="show = ! show" class="py-2 pl-3 pr-9 text-sm font-semibold w-32 text-left inline-flex"> Categories <svg class="transform -rotate-90 absolute pointer-events-none" style="right: 12px;" width="22" height="22" viewBox="0 0 22 22"> <g fill="none" fill-rule="evenodd"> <path stroke="#000" stroke-opacity=".012" stroke-width=".5" d="M21 1v20.16H.84V1z"> </path> <path fill="#222" d="M13.854 7.224l-3.847 3.856 3.847 3.856-1.184 1.184-5.04-5.04 5.04-5.04z"> </path> </g> </svg> </button> <div x-show="show" class="py-2 absolute bg-gray-100 w-full mt-2 rounded-xl"> @foreach ($categories as $category) <a href="/categories/{{ $category->slug }}" class="block text-left px-3 text-sm leading-6 hover:bg-blue-500 focus:bg-blue-500 hover:text-white focus:text-white"> {{ ucwords($category->name) }} </a> @endforeach </div> </div> </div>
web.php
파일 수정 (카테고리 클릭하면 페이지 이동) 10-1.'categories/{category:slug}'
부분 return에'currentCategory' => $category, 'categories' => Category::all(),
추가하기 10-2.'authors/{author:username}'
부분 return에, 'categories' => Category::all(),
추가하기현재 클릭한 카테고리를 보여주기 11-1.
_post-header.blade.php
파일에서 Category 를{{ isset($currentCategory) ? ucwords($currentCategory->name) : 'Categories' }}
로 변경하기11-2, @foreach 바로 위에 전체보여줄 수 있는 a 태그 만들기
<a href="/" class="block text-left px-3 text-sm leading-6 hover:bg-blue-500 focus:bg-blue-500 hover:text-white focus:text-white"> All
11-3. @foreach 안의 내용에 현재 클릭된 카테고리 배경색 지정 class 추가
<a href="/categories/{{ $category->slug }}" class="block text-left px-3 text-sm leading-6 hover:bg-blue-500 focus:bg-blue-500 hover:text-white focus:text-white {{ isset($currentCategory) && $currentCategory->id === $category->id ? 'bg-blue-500 text-white' : '' }} "> {{ ucwords($category->name) }}
11-4. 다른 방법
{{ isset($currentCategory) && $currentCategory->is($category) ? 'bg-blue-500 text-white' : '' }}
34강의 dropdown 작업부분을 components/dropdown.blade.php
에 옮기기
=> 이렇게 하면 <x-dropdown>
으로 불러와서 틀을 재사용할 수 있음.
그리고 dropdown 파일에는 trigger(무조건 보이는 버튼)와 slot (드롭다운메뉴) 만 넣어준다.
<div x-data="{ show: false }" @click.away="show = false">
<div @click="show = ! show">
{{ $trigger }}
</div>
<div x-show="show" class="py-2 absolute bg-gray-100 w-full mt-2 rounded-xl">
{{ $slot }}
</div>
<button>
태그에 @click="show = ! show"
지웠는지 확인!드롭다운 메뉴의 각 아이템을 보여주는 부분도 dropdown-item.blade.php
파일을 만들어 준다.
svg (아래로 된 화살표처럼 생긴 녀석) 아이콘도 icon.blade.php
라는 파일을 만들어서 분리해준다.
컴포넌트 재사용 파일에서는 무조건 들어갈 반복적인 속성을 아래처럼 넣어준다.
<svg {{ $attributes(['class' => 'transform -rotate-90']) }} >
재사용 컴포넌트에서 @if ( $name === "down-arrow" ) @endif
처럼 조건문을 활용하여 넣어둔 내용 중 일부만 사용할 수도 있다.
php에서는 문자열을 더할 때 .= 을 사용한다.
예시) '안녕' . '하세요'
=> 안녕하세요
예시) '안녕' . ' 하세요'
=> 안녕 하세요
x-dropdown-item
을 posts-header에서 @foreach
로 사용할 때
active
를 태그에 추가하는 세 가지 방법.8-1.문자열을 . 으로 더하는 방식
:active="request()->is('categories/' . $category->slug)"
8-2.문자열을 와일드 카드로 더하는 방식 (뒤에꺼가 있는지만 확인해라!)
:active="request()->is('*' . $category->slug)"
8-3.전체 주소를 php 문법을 포함해서 작성하는 방식
:active="request()->is('categories/{$category->slug}')"
영상에서는 3번을 활용하는데.. 나는 이상하게 잘 안돼서 1번을 사용함!
35강 변경된 코드 주소
https://github.com/kerbong/laravel_lecture/commit/1a28e659ae897a4a576c36ed01f829919acc5cb5
카테고리 드롭다운 아이템들의 max-height
설정 및 스크롤 설정해주기
드롭다운 위에 있던 p 태그와 By Lary La... 지우기
Other Filters 주석처리 하기
PostFactory 부분 수정하고 자료 새롭게 추가하기
'excerpt' => '<p>' . implode('</p><p>', $this->faker->paragraphs(2)) . '</p>',
'body' => '<p>' . implode('</p><p>', $this->faker->paragraphs(6)) . '</p>',
터미널에서 마이그레이트 초기화 및 자료 30개 생성
sail artisan migrate:fresh
sail artisan tinker
App\Models\Post::factory(30)->create()
계속 오류나서 한참 ...ㅠㅠㅠ
오류1
Illuminate\Database\QueryException with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'enim' for key 'categories.categories_name_unique'
==> 해결 카테고리팩토리 파일에서 unique 추가함!!
'name' => $this->faker->unique()->word(),
'slug' => $this->faker->unique()->slug,
오류2
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'body' at row 1 (SQL: insert into posts
==> 해결
migrations
폴더의 'post' 테이블 만드는 곳 찾아서 수정...
$table->string('title');
$table->text('excerpt'); ==> 이걸 string 에서 text로 변경!!
$table->text('body'); ==> 이걸 string 에서 text로 변경!!
$post
의 excerpt
body
의 가 태그로 인식되도록 blade 파일 변경하기.
(vsc 코드의 검색으로 $post->excerpt
해서 변경하면 편리함.)
(예시)
{{ $post->excerpt }}
대신
{!! $post->excerpt !!}
넣고
감싸던 p 태그도 없애고
상위 div 태그에 space-y-4
클래스 추가해서 p태그 내용 간에 간격 설정하기
https://github.com/kerbong/laravel_lecture/commit/4ced9de6080abc132d1b085be8853b2dd203f2fa
https://github.com/kerbong/laravel_lecture/commit/f75989fa21e1effde52dcc0369afa3bcd0dc4fe1
search 하는 input 태그에 검색한 값 보여주기 input 태그에 value 속성 넣어주기
web.php 라우트 파일에서 request 받아서 search하도록 만들기 $posts = Post::latest(); $posts->where("title", "like", '%' . request('search') . '%')
이렇게 하면 포스트 타이틀에 해당 단어가 들어간 것들을 모두 찾아줌.
두개의 쿼리를 쓸 경우 orWhere를 붙이기
말랑한거봉님