PHP강좌/[라라벨]게시판만들기강좌
[라라벨+mysql]게시판 만들기 강좌 #20. 사용자 함수 등록하기
에스크리토
2024. 7. 31. 15:35
반응형
섬머노트를 하기전에 사용자 함수 만드는 걸 해보려고 한다.
요즘 커뮤니티의 게시판을 보면 사용자가 새 글을 등록하면 날짜를 표시 해주는 것이 아니고 몇분전 몇시간전 이렇게 표시되는걸 볼 수 있다. 사용자 함수를 만들어서 이렇게 표시되도록 바꾸어 보자.
/app/Helpers.php
<?php
function disptime($regdate){
$sec = strtotime(date("Y-m-d H:i:s")) - strtotime($regdate);
if ($sec < 60) {
$dispdates = $sec."초 전";
} else if ($sec > 60 && $sec < 3600) {
$f = floor($sec / 60);
$dispdates = $f."분 전";
} else if ($sec > 3600 && $sec < 86400) {
$f = floor($sec / 3600);
$dispdates = $f."시간 전";
} else {
$dispdates = date("Y-m-d",strtotime($regdate));
}
return $dispdates;
}
?>
이후로 사용자 함수를 추가할땐 이 파일에 넣어주면 된다.
/composer.json
{
"name": "laravel/laravel",
"type": "project",
"description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"],
"license": "MIT",
"require": {
"php": "^8.1",
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10",
"laravel/sanctum": "^3.3",
"laravel/tinker": "^2.8"
},
"require-dev": {
"fakerphp/faker": "^1.9.1",
"laracademy/generators": "^3.7",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^10.1",
"spatie/laravel-ignition": "^2.0"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
"files": [
"app/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true,
"allow-plugins": {
"pestphp/pest-plugin": true,
"php-http/discovery": true
}
},
"minimum-stability": "stable",
"prefer-stable": true
}
사용자 함수에 사용할 파일이 app/Helpers.php 라고 등록해준다.
그리고 반드시
$composer dump-autoload
composer를 다시 로드해준다. 이건 처음 한번만 하면 된다.
이제 소스를 조금 수정하자.
/resources/views/boards/index.blade.php
@extends('boards.layout')
@section('header')
@include('boards.toptitle', ['toptitle'=>'게시판 목록', 'multi'=>$multi])
@endsection
@section('content')
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div style="text-align:right;">
<a href="/boards/write/{{ $multi }}"><button class="text-xl">등록</button></a>
</div>
<table class="table table-striped table-hover">
<colgroup>
<col width="10%"/>
<col width="15%"/>
<col width="45%"/>
<col width="15%"/>
<col width="15%"/>
</colgroup>
<thead>
<tr>
<th scope="col">번호</th>
<th scope="col">이름</th>
<th scope="col">제목</th>
<th scope="col">조회수</th>
<th scope="col">등록일</th>
</tr>
</thead>
<tbody>
<?php
$pagenumber = $_GET["page"]??1;
$total = $boards->total();
$idx = $total-(($boards->currentPage()-1) * 20);
?>
@foreach ($boards as $board)
<tr>
<th scope="row">{{ $idx-- }}</th>
<td>{{ $board->userid }}</td>
<td><a href="/boards/show/{{$board->bid}}/{{$pagenumber}}">{{ $board->subject }}</a></td>
<td>{{ number_format($board->cnt) }}</td>
<td>{{ disptime($board->regdate) }}</td>
</tr>
@endforeach
@if(!$total)
<tr>
<th scope="row" colspan="5">게시물이 없습니다.</td>
</tr>
@endif
</tbody>
</table>
<div>
{!! $boards->withQueryString()->links() !!}
</dvi>
@endsection
날짜 부분에 disptime함수를 적용했다.
게시판 메인 화면을 확인해보면 날짜 표시가 분전 시간전으로 표시되는걸 확인할 수 있다.
다음 시간엔 웹에디터를 해보자.
반응형