zzolab / Laravel_Study

우리들의 라라벨 이야기
4 stars 0 forks source link

34-38강 정리 #2

Closed Szzng closed 2 years ago

Szzng commented 2 years ago

말랑한거봉님

kerbong commented 2 years ago

34강

A Small JavaScript Dropdown Detour

_posts-header.blade.php 헤더 드롭다운메뉴 수정

  1. <select> 태그와 <svg> 태그 내용 주석처리

  2. layout.blade.php 파일 상단 마지막 <link> 태그 아래로 가기

  3. <script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script> 붙여넣기

  4. 다시 header파일로 돌아와서

  5. 주석처리한 부분에 추가하기

One Two Three
  1. Categories 만 나오는지 확인하고
  1. <button>Categories</button> 에 click 이벤트 달기

  2. <button @click="show = ! show"> *안될경우 @click=" alert('hi')" 로 실행되는지 확인

  3. 스타일 및 배경 클릭 시 드롭다운 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>
  1. web.php 파일 수정 (카테고리 클릭하면 페이지 이동) 10-1. 'categories/{category:slug}' 부분 return에 'currentCategory' => $category, 'categories' => Category::all(), 추가하기 10-2. 'authors/{author:username}' 부분 return에 , 'categories' => Category::all(), 추가하기

  2. 현재 클릭한 카테고리를 보여주기 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' : '' }}

kerbong commented 2 years ago

35강

How to Extract a Dropdown Blade Component

드롭다운 부분을 컴포넌트로 만들기

  1. 34강의 dropdown 작업부분을 components/dropdown.blade.php 에 옮기기 => 이렇게 하면 <x-dropdown> 으로 불러와서 틀을 재사용할 수 있음.

  2. 그리고 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>

  1. 드롭다운 메뉴의 각 아이템을 보여주는 부분도 dropdown-item.blade.php 파일을 만들어 준다.

  2. svg (아래로 된 화살표처럼 생긴 녀석) 아이콘도 icon.blade.php 라는 파일을 만들어서 분리해준다.

  3. 컴포넌트 재사용 파일에서는 무조건 들어갈 반복적인 속성을 아래처럼 넣어준다.

<svg {{ $attributes(['class' => 'transform -rotate-90']) }} >

  1. 재사용 컴포넌트에서 @if ( $name === "down-arrow" ) @endif 처럼 조건문을 활용하여 넣어둔 내용 중 일부만 사용할 수도 있다.

  2. php에서는 문자열을 더할 때 .= 을 사용한다. 예시) '안녕' . '하세요' => 안녕하세요 예시) '안녕' . ' 하세요' => 안녕 하세요

  1. 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}')"

https://github.com/kerbong/laravel_lecture/commit/1a28e659ae897a4a576c36ed01f829919acc5cb5

kerbong commented 2 years ago

36강

Quick Tweaks and Clean-Up

dropdown css 정리 및 html 정리

  1. 카테고리 드롭다운 아이템들의 max-height 설정 및 스크롤 설정해주기

  2. 드롭다운 위에 있던 p 태그와 By Lary La... 지우기

  3. Other Filters 주석처리 하기

  4. 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()

==> 해결 카테고리팩토리 파일에서 unique 추가함!!

 'name' => $this->faker->unique()->word(),
 'slug' => $this->faker->unique()->slug,

==> 해결

migrations 폴더의 'post' 테이블 만드는 곳 찾아서 수정...

           $table->string('title');
        $table->text('excerpt');           ==> 이걸 string 에서 text로 변경!!
        $table->text('body');                ==> 이걸 string 에서 text로 변경!!
  1. $postexcerpt body

    가 태그로 인식되도록 blade 파일 변경하기.

(vsc 코드의 검색으로 $post->excerpt 해서 변경하면 편리함.) (예시) {{ $post->excerpt }} 대신 {!! $post->excerpt !!} 넣고 감싸던 p 태그도 없애고

상위 div 태그에 space-y-4 클래스 추가해서 p태그 내용 간에 간격 설정하기

https://github.com/kerbong/laravel_lecture/commit/4ced9de6080abc132d1b085be8853b2dd203f2fa

kerbong commented 2 years ago

37강

Search (The Messy Way)

검색기능 만들기

https://github.com/kerbong/laravel_lecture/commit/f75989fa21e1effde52dcc0369afa3bcd0dc4fe1

  1. search 하는 input 태그에 검색한 값 보여주기 input 태그에 value 속성 넣어주기

  2. web.php 라우트 파일에서 request 받아서 search하도록 만들기 $posts = Post::latest(); $posts->where("title", "like", '%' . request('search') . '%')

이렇게 하면 포스트 타이틀에 해당 단어가 들어간 것들을 모두 찾아줌.

두개의 쿼리를 쓸 경우 orWhere를 붙이기