Write.cshtml 15 KB

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