Write.cshtml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. @model Admin.ViewModels.Forum.Board.Meta.IndexViewModel
  2. @using Library.Constants
  3. @{
  4. ViewData["Title"] = "게시판 관리 - 작성";
  5. }
  6. <div class="container">
  7. <partial name="~/Views/Forum/Board/Meta/_Header.cshtml"/>
  8. <partial name="_StatusMessage" />
  9. <partial name="_Editor" />
  10. <partial name="~/Views/Forum/Board/Meta/_Navbar.cshtml" />
  11. <form name="f_admin_write" id="fAdminWrite" method="post" accept-charset="utf-8" autocomplete="off" action="/Forum/Board/Meta/Update/Write" enctype="multipart/form-data">
  12. <input type="hidden" name="BoardMeta.Board.Code" value="@Model.Board.Code" />
  13. <input type="hidden" asp-for="BoardMeta.ID" />
  14. <input type="hidden" asp-for="BoardMeta.BoardID" />
  15. <div class="row mb-3">
  16. <label for="BoardMeta_Write_ShowHeader" class="col-sm-2 col-form-label">상단 내용</label>
  17. <div class="col-md-10">
  18. <div class="form-check">
  19. <input type="checkbox" asp-for="BoardMeta.Write.ShowHeader" class="form-check-input" />
  20. <label for="BoardMeta_Write_ShowHeader" class="form-check-label">사용합니다.</label>
  21. </div>
  22. <small class="text-muted form-text">게시판 상단에 내용을 출력합니다.</small>
  23. </div>
  24. </div>
  25. <div class="row mb-3">
  26. <label class="col-md-2 col-form-label"></label>
  27. <div class="col-md-10">
  28. <textarea asp-for="BoardMeta.Write.HeaderContent" class="form-control ck-editor"></textarea>
  29. <span asp-validation-for="BoardMeta.Write.HeaderContent" class="text-danger"></span>
  30. <small class="text-muted form-text">작성란 상단에 표시될 내용을 입력합니다.</small>
  31. </div>
  32. </div>
  33. <div class="row mb-3">
  34. <label for="BoardMeta_Write_ShowFooter" class="col-sm-2 col-form-label">하단 내용</label>
  35. <div class="col-md-10">
  36. <div class="form-check">
  37. <input type="checkbox" asp-for="BoardMeta.Write.ShowFooter" class="form-check-input" />
  38. <label for="BoardMeta_Write_ShowFooter" class="form-check-label">사용합니다.</label>
  39. </div>
  40. <small class="text-muted form-text">게시판 하단에 내용을 출력합니다.</small>
  41. </div>
  42. </div>
  43. <div class="row mb-3">
  44. <label class="col-md-2 col-form-label"></label>
  45. <div class="col-md-10">
  46. <textarea asp-for="BoardMeta.Write.FooterContent" class="form-control ck-editor"></textarea>
  47. <span asp-validation-for="BoardMeta.Write.FooterContent" class="text-danger"></span>
  48. <small class="text-muted form-text">작성란 하단에 표시될 내용을 입력합니다.</small>
  49. </div>
  50. </div>
  51. <div class="row mb-3">
  52. <label for="BoardMeta_Write_DefaultSubject" class="col-md-2 col-form-label">기본 제목</label>
  53. <div class="col-md-10">
  54. <input type="text" asp-for="BoardMeta.Write.DefaultSubject" class="form-control" maxlength="@PostConst.MaxAllowedSubjectLength" />
  55. <span asp-validation-for="BoardMeta.Write.DefaultSubject" class="text-danger"></span>
  56. <small class="text-muted form-text">글 작성 시 기본으로 표시될 제목입니다.</small>
  57. </div>
  58. </div>
  59. <div class="row mb-3">
  60. <label for="BoardMeta_Write_DefaultContent" class="col-md-2 col-form-label">기본 내용</label>
  61. <div class="col-md-10">
  62. <textarea asp-for="BoardMeta.Write.DefaultContent" class="form-control @(Model.BoardMeta.Write.AllowEditor ? "ck-editor" : "")" maxlength="@PostConst.MaxAllowedContentLength"></textarea>
  63. <span asp-validation-for="BoardMeta.Write.DefaultContent" class="text-danger"></span>
  64. <small class="text-muted form-text">글 작성 시 기본으로 표시될 내용입니다.</small>
  65. </div>
  66. </div>
  67. <div class="row mb-3">
  68. <label for="BoardMeta_Write_AllowEditor" class="col-md-2 col-form-label">웹 에디터 사용</label>
  69. <div class="col-md-10 align-self-center">
  70. <div class="form-check">
  71. <input type="checkbox" asp-for="BoardMeta.Write.AllowEditor" class="form-check-input" />
  72. <label asp-for="BoardMeta.Write.AllowEditor" class="form-check-label">사용합니다.</label>
  73. </div>
  74. <small class="text-muted form-text">본문을 웹 기반 에디터로 수정할 수 있도록합니다.</small>
  75. </div>
  76. </div>
  77. <div class="row mb-3">
  78. <label for="BoardMeta_Write_AllowPrefix" class="col-md-2 col-form-label">말머리 사용</label>
  79. <div class="col-md-10 align-self-center">
  80. <div class="form-check">
  81. <input type="checkbox" asp-for="BoardMeta.Write.AllowPrefix" class="form-check-input" />
  82. <label asp-for="BoardMeta.Write.AllowPrefix" class="form-check-label">사용합니다.</label>
  83. </div>
  84. <small class="text-muted form-text">말머리를 사용할 수 있도록 합니다.</small>
  85. </div>
  86. </div>
  87. <div class="row mb-3">
  88. <label for="BoardMeta_Write_RequiredPrefix" class="col-md-2 col-form-label">말머리 필수 선택</label>
  89. <div class="col-md-10 align-self-center">
  90. <div class="form-check">
  91. <input type="checkbox" asp-for="BoardMeta.Write.RequiredPrefix" class="form-check-input" />
  92. <label asp-for="BoardMeta.Write.RequiredPrefix" class="form-check-label">사용합니다.</label>
  93. </div>
  94. <small class="text-muted form-text">말머리를 필수 선택하도록 합니다.</small>
  95. </div>
  96. </div>
  97. <div class="row mb-3">
  98. <label for="BoardMeta_Write_AllowSecret" class="col-md-2 col-form-label">비밀글 사용</label>
  99. <div class="col-md-10 align-self-center">
  100. <div class="form-check">
  101. <input type="checkbox" asp-for="BoardMeta.Write.AllowSecret" class="form-check-input" />
  102. <label asp-for="BoardMeta.Write.AllowSecret" class="form-check-label">사용합니다.</label>
  103. </div>
  104. <small class="text-muted form-text">비밀글 작성 기능을 활성화합니다. 비밀글은 작성자 본인과 게시판 관리자 이상만 열람 가능합니다.</small>
  105. </div>
  106. </div>
  107. <div class="row mb-3">
  108. <label for="BoardMeta_Write_AllowTag" class="col-md-2 col-form-label">태그 사용</label>
  109. <div class="col-md-10 align-self-center">
  110. <div class="form-check">
  111. <input type="checkbox" asp-for="BoardMeta.Write.AllowTag" class="form-check-input" />
  112. <label asp-for="BoardMeta.Write.AllowTag" class="form-check-label">사용합니다.</label>
  113. </div>
  114. <small class="text-muted form-text">태그 기능을 활성화합니다.</small>
  115. </div>
  116. </div>
  117. <div class="row mb-3">
  118. <label for="BoardMeta_Write_TagLimit" class="col-12 col-lg-2 col-form-label">태그 개수 제한</label>
  119. <div class="col-lg-10">
  120. <div class="row">
  121. <div class="col-12 col-lg-auto">
  122. <input type="number" asp-for="BoardMeta.Write.TagLimit" class="form-control" min="1" max="{@PostConst.MaxAllowedTags}" required />
  123. <span asp-validation-for="BoardMeta.Write.TagLimit" class="text-danger"></span>
  124. </div>
  125. </div>
  126. <small class="text-muted form-text">태그의 최대 개수를 설정합니다. 최대 {@PostConst.MaxAllowedTags}개</small>
  127. </div>
  128. </div>
  129. <br />
  130. <h3>웹 에디터 기능 설정</h3>
  131. <hr />
  132. <div class="row mb-3">
  133. <label for="BoardMeta_Write_AllowImage" class="col-md-2 col-form-label">이미지 사용</label>
  134. <div class="col-md-10 align-self-center">
  135. <div class="form-check">
  136. <input type="checkbox" asp-for="BoardMeta.Write.AllowImage" class="form-check-input" />
  137. <label asp-for="BoardMeta.Write.AllowImage" class="form-check-label">사용합니다.</label>
  138. </div>
  139. <small class="text-muted form-text">이미지 업로드 기능을 활성화합니다. </small>
  140. </div>
  141. </div>
  142. <div class="row mb-3">
  143. <label for="BoardMeta_Write_ImageUploadLimit" class="col-12 col-lg-2 col-form-label">이미지 개수 제한</label>
  144. <div class="col-lg-10">
  145. <div class="row">
  146. <div class="col-12 col-lg-auto">
  147. <input type="number" asp-for="BoardMeta.Write.ImageUploadLimit" class="form-control" min="1" max="{@PostConst.MaxAllowedImages}" required />
  148. <span asp-validation-for="BoardMeta.Write.ImageUploadLimit" class="text-danger"></span>
  149. </div>
  150. </div>
  151. <small class="text-muted form-text">첨부 가능한 이미지의 최대 개수를 설정합니다. 최대 @(PostConst.MaxAllowedImages)개</small>
  152. </div>
  153. </div>
  154. <div class="row mb-3">
  155. <label for="BoardMeta_Write_ImageUploadMaxSize" class="col-12 col-lg-2 col-form-label">이미지 용량 제한</label>
  156. <div class="col-lg-10">
  157. <div class="row">
  158. <div class="col-12 col-lg-auto">
  159. <div class="input-group">
  160. <input type="number" asp-for="BoardMeta.Write.ImageUploadMaxSize" class="form-control" min="0" required />
  161. <span class="input-group-text">KB</span>
  162. </div>
  163. <span asp-validation-for="BoardMeta.Write.ImageUploadMaxSize" class="text-danger"></span>
  164. </div>
  165. </div>
  166. <small class="text-muted form-text">이미지 하나당 최대 용량을 설정합니다. 최대 @(PostConst.MaxAllowedImageSize)KB</small>
  167. </div>
  168. </div>
  169. <hr />
  170. <div class="row mb-3">
  171. <label for="BoardMeta_Write_AllowMedia" class="col-md-2 col-form-label">미디어 사용</label>
  172. <div class="col-md-10 align-self-center">
  173. <div class="form-check">
  174. <input type="checkbox" asp-for="BoardMeta.Write.AllowMedia" class="form-check-input" />
  175. <label asp-for="BoardMeta.Write.AllowMedia" class="form-check-label">사용합니다.</label>
  176. </div>
  177. <small class="text-muted form-text">미디어 추가 기능을 활성화합니다. (웹 에디터를 사용해야 가능)</small>
  178. </div>
  179. </div>
  180. <div class="row mb-3">
  181. <label for="BoardMeta_Write_MediaUploadLimit" class="col-12 col-lg-2 col-form-label">동영상 개수 제한</label>
  182. <div class="col-lg-10">
  183. <div class="row">
  184. <div class="col-12 col-lg-auto">
  185. <input type="number" asp-for="BoardMeta.Write.MediaUploadLimit" class="form-control" min="1" max="@PostConst.MaxAllowedMedias" required />
  186. <span asp-validation-for="BoardMeta.Write.MediaUploadLimit" class="text-danger"></span>
  187. </div>
  188. </div>
  189. <small class="text-muted form-text">첨부 가능한 동영상의 최대 개수를 설정합니다. 최대 @(PostConst.MaxAllowedMedias)개</small>
  190. </div>
  191. </div>
  192. <hr />
  193. <div class="row mb-3">
  194. <label for="BoardMeta_Write_AllowFile" class="col-md-2 col-form-label">파일 사용</label>
  195. <div class="col-md-10 align-self-center">
  196. <div class="form-check">
  197. <input type="checkbox" asp-for="BoardMeta.Write.AllowFile" class="form-check-input" />
  198. <label asp-for="BoardMeta.Write.AllowFile" class="form-check-label">사용합니다.</label>
  199. </div>
  200. <small class="text-muted form-text">파일 추가 기능을 활성화합니다.</small>
  201. </div>
  202. </div>
  203. <div class="row mb-3">
  204. <label for="BoardMeta_Write_FileUploadLimit" class="col-12 col-lg-2 col-form-label">파일 개수 제한</label>
  205. <div class="col-lg-10">
  206. <div class="row">
  207. <div class="col-12 col-lg-auto">
  208. <input type="number" asp-for="BoardMeta.Write.FileUploadLimit" class="form-control" min="1" max="@PostConst.MaxAllowedFiles" required />
  209. <span asp-validation-for="BoardMeta.Write.FileUploadLimit" class="text-danger"></span>
  210. </div>
  211. </div>
  212. <small class="text-muted form-text">첨부 가능한 파일의 최대 개수를 설정합니다. 최대 @(PostConst.MaxAllowedFiles)개</small>
  213. </div>
  214. </div>
  215. <div class="row mb-3">
  216. <label for="BoardMeta_Write_FileUploadMaxSize" class="col-12 col-lg-2 col-form-label">파일 용량 제한</label>
  217. <div class="col-lg-10">
  218. <div class="row">
  219. <div class="col-12 col-lg-auto">
  220. <div class="input-group">
  221. <input type="number" asp-for="BoardMeta.Write.FileUploadMaxSize" class="form-control" min="1" max="@PostConst.MaxAllowedFileSize" required />
  222. <span class="input-group-text">KB</span>
  223. </div>
  224. <span asp-validation-for="BoardMeta.Write.FileUploadMaxSize" class="text-danger"></span>
  225. </div>
  226. </div>
  227. <small class="text-muted form-text">파일 하나당 최대 용량을 설정합니다. 최대 @(PostConst.MaxAllowedFileSize)KB</small>
  228. </div>
  229. </div>
  230. <div class="row mb-3">
  231. <label for="BoardMeta_Write_FileUploadExtension" class="col-md-2 col-form-label">파일 허용 확장자</label>
  232. <div class="col-md-10">
  233. <input type="text" asp-for="BoardMeta.Write.FileUploadExtension" class="form-control" />
  234. <span asp-validation-for="BoardMeta.Write.FileUploadExtension" class="text-danger"></span>
  235. <small class="form-text text-muted">
  236. 허용할 파일 확장자를 입력합니다. (예: jpg,png,gif)<br/>
  237. HTML5 File 속성 사용, `|` 로 구분하여 입력, 입력하지 않으면 확장자 제한없이 첨부 가능
  238. <br/><a href="//www.w3schools.com/tags/att_input_accept.asp" target="_blank">[FILE 속성 참고]</a><br/>
  239. <pre>&lt;input accept="<em>file_extension</em>|audio/*|video/*|image/*|<i>media_type</i>"&gt;</pre>
  240. </small>
  241. </div>
  242. </div>
  243. <hr />
  244. <div class="d-grid gap-2 text-center d-md-block">
  245. <button type="submit" class="btn btn-sm btn-success">저장</button>
  246. <a href="/Forum/Board/List?@ViewBag.QueryString" class="btn btn-sm btn-secondary">취소</a>
  247. </div>
  248. <br />
  249. </form>
  250. </div>
  251. @section Scripts {
  252. <script>
  253. $(document).on("change", "#BoardMeta_Write_AllowEditor", function(e) {
  254. const textareaID = "BoardMeta_Write_DefaultContent";
  255. if (e.target.checked) { // CKEditor 표시
  256. initEditor(textareaID);
  257. } else { // Textarea로 변경
  258. destroyEditor(textareaID);
  259. }
  260. });
  261. </script>
  262. }