PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/baser/views/pages/admin/form.php

https://github.com/hashing/basercms
PHP | 444 lines | 387 code | 23 blank | 34 comment | 63 complexity | bb83ccb9889e5e63e1150b896675b43e MD5 | raw file
Possible License(s): MIT
  1. <?php
  2. /* SVN FILE: $Id$ */
  3. /**
  4. * [ADMIN] ページ登録・編集フォーム
  5. *
  6. * PHP versions 4 and 5
  7. *
  8. * baserCMS : Based Website Development Project <http://basercms.net>
  9. * Copyright 2008 - 2011, baserCMS Users Community <http://sites.google.com/site/baserusers/>
  10. *
  11. * @copyright Copyright 2008 - 2011, baserCMS Users Community
  12. * @link http://basercms.net baserCMS Project
  13. * @package baser.views
  14. * @since baserCMS v 2.0.0
  15. * @version $Revision$
  16. * @modifiedby $LastChangedBy$
  17. * @lastmodified $Date$
  18. * @license http://basercms.net/license/index.html
  19. */
  20. $bcBaser->css('ckeditor/editor', array('inline' => true));
  21. $bcBaser->link('&nbsp;', array('action'=>'preview', $previewId), array('style'=>'display:none', 'id'=>'LinkPreview'));
  22. $pageTypes = array();
  23. if(Configure::read('BcApp.mobile') || Configure::read('BcApp.smartphone')) {
  24. $pageTypes = array('1' => 'PC');
  25. }
  26. if(Configure::read('BcApp.mobile')) {
  27. $pageTypes['2'] = 'モバイル';
  28. }
  29. if(Configure::read('BcApp.smartphone')) {
  30. $pageTypes['3'] = 'スマートフォン';
  31. }
  32. ?>
  33. <script type="text/javascript">
  34. $(window).load(function() {
  35. $("#PageName").focus();
  36. });
  37. $(function(){
  38. pageCategoryIdChangeHandler();
  39. /**
  40. * プレビューボタンクリック時イベント
  41. */
  42. $("#BtnPreview").click(function(){
  43. var contents = $("#PageContents").val();
  44. $("#PageContents").val(editor_contents_tmp.getData());
  45. $.ajax({
  46. type: "POST",
  47. url: $("#PreviewUrl").html(),
  48. data: $("#PageForm").serialize(),
  49. success: function(result){
  50. if(result) {
  51. $("#LinkPreview").trigger("click");
  52. } else {
  53. alert('プレビューの読み込みに失敗しました。');
  54. }
  55. }
  56. });
  57. $("#PageContents").val(contents);
  58. return false;
  59. });
  60. /**
  61. * フォーム送信時イベント
  62. */
  63. $("#btnSave").click(function(){
  64. if($("#PageReflectMobile").attr('checked')){
  65. if(!confirm('このページを元にモバイルページを作成します。いいですか?\n\n'+
  66. ' ※ モバイルカテゴリの同階層に保存します。\n'+
  67. ' ※ 既に存在する場合は上書きします。')){
  68. return false;
  69. }
  70. }
  71. if($("#PageReflectSmartphone").attr('checked')){
  72. if(!confirm('このページを元にスマートフォンページを作成します。いいですか?\n\n'+
  73. ' ※ スマートフォンカテゴリの同階層に保存します。\n'+
  74. ' ※ 既に存在する場合は上書きします。')){
  75. return false;
  76. }
  77. }
  78. editor_contents_tmp.execCommand('synchronize');
  79. $("#PageMode").val('save');
  80. $("#PageForm").submit();
  81. });
  82. /**
  83. * カテゴリ変更時イベント
  84. */
  85. $("#PagePageCategoryId").change(pageCategoryIdChangeHandler);
  86. $('input[name="data[Page][page_type]"]').click(pageTypeChengeHandler);
  87. });
  88. /**
  89. * モバイル反映欄の表示設定
  90. */
  91. function pageCategoryIdChangeHandler() {
  92. var pageType = 1;
  93. var previewWidth;
  94. if($("#MobileOn").html() || $("#SmartphoneOn").html()) {
  95. var pageCategoryId = $("#PagePageCategoryId").val();
  96. if($('input[name="data[Page][page_type]"]:checked').val() == 2 && !pageCategoryId) {
  97. pageCategoryId = $("#RootMobileId").html();
  98. } else if($('input[name="data[Page][page_type]"]:checked').val() == 3 && !pageCategoryId) {
  99. pageCategoryId = $("#RootSmartphoneId").html();
  100. }
  101. // モバイルカテゴリ判定
  102. if($('input[name="data[Page][page_type]"]:checked').val() == 2) {
  103. pageType = 2;
  104. } else if($('input[name="data[Page][page_type]"]:checked').val() == 3) {
  105. pageType = 3;
  106. }
  107. // モバイルカテゴリを選択した場合は表示しない
  108. if(pageType != 2 && $("#Action").html() == 'admin_edit'){
  109. $.ajax({
  110. type: "POST",
  111. url: $("#CheckAgentPageAddableUrl").html()+'/mobile/'+pageCategoryId,
  112. beforeSend: function() {
  113. $("#AjaxLoader").show();
  114. },
  115. success: function(result){
  116. if(result) {
  117. changeStateReflectMobile(true);
  118. } else {
  119. changeStateReflectMobile(false);
  120. }
  121. },
  122. complete: function() {
  123. $("#AjaxLoader").hide();
  124. }
  125. });
  126. }else{
  127. changeStateReflectMobile(false);
  128. }
  129. // スマートフォンカテゴリを選択した場合は表示しない
  130. if(pageType != 3 && $("#Action").html() == 'admin_edit'){
  131. $.ajax({
  132. type: "POST",
  133. url: $("#CheckAgentPageAddableUrl").html()+'/smartphone/'+pageCategoryId,
  134. beforeSend: function() {
  135. $("#AjaxLoader").show();
  136. },
  137. success: function(result){
  138. if(result) {
  139. changeStateReflectSmartphone(true);
  140. } else {
  141. changeStateReflectSmartphone(false);
  142. }
  143. },
  144. complete: function() {
  145. $("#AjaxLoader").hide();
  146. }
  147. });
  148. }else{
  149. changeStateReflectSmartphone(false);
  150. }
  151. }
  152. // プレビューをモバイル用にリサイズする
  153. if(pageType == 2) {
  154. previewWidth = '270px';
  155. }else if(pageType == 3) {
  156. previewWidth = '350px';
  157. } else {
  158. previewWidth = '90%';
  159. }
  160. $("#LinkPreview").colorbox({width: previewWidth, height:"90%", iframe:true});
  161. }
  162. function changeStateReflectMobile(use) {
  163. if(use) {
  164. $("#RowReflectMobile").show();
  165. }else{
  166. $("#PageReflectMobile").attr('checked', false);
  167. $("#RowReflectMobile").hide();
  168. }
  169. }
  170. function changeStateReflectSmartphone(use) {
  171. if(use) {
  172. $("#RowReflectSmartphone").show();
  173. }else{
  174. $("#PageReflectSmartphone").attr('checked', false);
  175. $("#RowReflectSmartphone").hide();
  176. }
  177. }
  178. function pageTypeChengeHandler() {
  179. var pageType = $('input[name="data[Page][page_type]"]:checked').val();
  180. var options = {};
  181. if($("#PageId").val()) {
  182. options = {
  183. "data[Option][own]":true,
  184. "data[Option][empty]": '指定しない',
  185. "data[Option][currentPageCategoryId]": $("#PageCategoryId").html(),
  186. "data[Option][currentOwnerId]": $("#PageCategoryOwnerId").html()
  187. };
  188. } else {
  189. options = {
  190. "data[Option][own]":true,
  191. "data[Option][empty]": '指定しない'
  192. };
  193. }
  194. $.ajax({
  195. type: "POST",
  196. data: options,
  197. url: $("#AjaxCategorySourceUrl").html()+'/'+pageType,
  198. beforeSend: function() {
  199. $("#CategoryAjaxLoader").show();
  200. },
  201. success: function(result){
  202. if(result) {
  203. $("#PagePageCategoryId option").remove();
  204. $("#PagePageCategoryId").append($(result).find('option'));
  205. $("#PagePageCategoryId").val('');
  206. pageCategoryIdChangeHandler();
  207. }
  208. },
  209. complete: function() {
  210. $("#CategoryAjaxLoader").hide();
  211. }
  212. });
  213. }
  214. </script>
  215. <div class="display-none">
  216. <div id="PreviewUrl"><?php $bcBaser->url(array('action' => 'create_preview', $previewId)) ?></div>
  217. <div id="CheckAgentPageAddableUrl"><?php $bcBaser->url(array('action' => 'check_agent_page_addable')) ?></div>
  218. <div id="AjaxCategorySourceUrl"><?php $bcBaser->url(array('action' => 'ajax_category_source')) ?></div>
  219. <div id="PageCategoryId"><?php echo $bcForm->value('PageCategory.id') ?></div>
  220. <div id="PageCategoryOwnerId"><?php echo $bcForm->value('PageCategory.owner_id') ?></div>
  221. <div id="RootMobileId"><?php echo $rootMobileId ?></div>
  222. <div id="RootSmartphoneId"><?php echo $rootSmartphoneId ?></div>
  223. <div id="MobileOn"><?php echo Configure::read('BcApp.mobile') ?></div>
  224. <div id="SmartphoneOn"><?php echo Configure::read('BcApp.smartphone') ?></div>
  225. <div id="Action"><?php echo $this->action ?></div>
  226. </div>
  227. <?php if($this->action == 'admin_edit'): ?>
  228. <div class="em-box align-left">
  229. <?php if($bcForm->value('Page.status')): ?>
  230. <strong>このページのURL<?php $bcBaser->link($bcBaser->getUri($url), $url) ?></strong>
  231. <?php else: ?>
  232. <strong>このページのURL<?php echo $bcBaser->getUri($url) ?></strong>
  233. <?php endif ?>
  234. </div>
  235. <?php endif ?>
  236. <?php echo $bcForm->create('Page', array('id' => 'PageForm')) ?>
  237. <?php echo $bcForm->input('Page.mode', array('type' => 'hidden')) ?>
  238. <?php echo $bcForm->input('Page.sort', array('type' => 'hidden')) ?>
  239. <!-- form -->
  240. <div class="section">
  241. <table cellpadding="0" cellspacing="0" class="form-table">
  242. <?php if($this->action == 'admin_edit'): ?>
  243. <tr>
  244. <th class="col-head"><?php echo $bcForm->label('Page.id', 'NO') ?></th>
  245. <td class="col-input">
  246. <?php echo $bcForm->value('Page.id') ?>
  247. <?php echo $bcForm->input('Page.id', array('type' => 'hidden')) ?>
  248. </td>
  249. </tr>
  250. <?php endif; ?>
  251. <?php if($categories): ?>
  252. <tr>
  253. <th class="col-head"><?php echo $bcForm->label('Page.page_category_id', 'カテゴリー') ?></th>
  254. <td class="col-input">
  255. <?php if($pageTypes): ?>
  256. <?php echo $bcForm->input('Page.page_type', array(
  257. 'type' => 'radio',
  258. 'options' => $pageTypes)) ?></span> 
  259. <?php else: ?>
  260. <?php echo $bcForm->input('Page.page_type', array('type' => 'hidden')) ?></span>
  261. <?php endif ?>
  262. <?php echo $bcForm->input('Page.page_category_id', array(
  263. 'type' => 'select',
  264. 'options' => $categories,
  265. 'escape' => false)) ?>
  266. <?php $bcBaser->img('ajax-loader-s.gif', array('id' => 'CategoryAjaxLoader', 'class' => 'display-none', 'style' => 'vertical-align:middle')) ?>
  267. <?php echo $bcForm->error('Page.page_category_id') ?>
  268. </td>
  269. </tr>
  270. <?php else: ?>
  271. <?php echo $bcForm->hidden('Page.page_category_id') ?>
  272. <?php endif ?>
  273. <tr>
  274. <th class="col-head"><?php echo $bcForm->label('Page.name', 'ページ名') ?>&nbsp;<span class="required">*</span></th>
  275. <td class="col-input">
  276. <?php echo $bcForm->input('Page.name', array('type' => 'text', 'size' => 40, 'maxlength' => 50)) ?>
  277. <?php echo $html->image('admin/icn_help.png', array('id' => 'helpName', 'class' => 'btn help', 'alt' => 'ヘルプ')) ?>
  278. <?php echo $bcForm->error('Page.name') ?>
  279. <div id="helptextName" class="helptext">
  280. <ul>
  281. <li>ページ名はURLに利用します</li>
  282. <li>.htmlなどの拡張子は不要です</li>
  283. <li>日本語の入力が可能です</li>
  284. </ul>
  285. </div>
  286. </td>
  287. </tr>
  288. <tr>
  289. <th class="col-head"><?php echo $bcForm->label('Page.title', 'タイトル') ?></th>
  290. <td class="col-input">
  291. <?php echo $bcForm->input('Page.title', array('type' => 'text', 'size'=> 40, 'maxlength' => 255, 'counter' => true, 'class' => 'full-width')) ?>
  292. <?php echo $html->image('admin/icn_help.png', array('id' => 'helpTitle', 'class' => 'btn help', 'alt' => 'ヘルプ')) ?>
  293. <?php echo $bcForm->error('Page.title') ?>
  294. <div id="helptextTitle" class="helptext">
  295. <ul>
  296. <li>タイトルはTitleタグに利用しブラウザのタイトルバーに表示されます</li>
  297. <li>タイトルタグの出力するにはレイアウトテンプレートに次のように記述します<br />
  298. &lt;?php $bcBaser->title() ?&gt;<br />
  299. <small> タイトルにはサイト基本設定で設定されたWEBサイト名が自動的に追加されます<br />
  300. トップページの場合などWEBサイト名のみをタイトルバーに表示したい場合は空にします</small></li>
  301. </ul>
  302. </div>
  303. </td>
  304. </tr>
  305. <tr>
  306. <th class="col-head"><?php echo $bcForm->label('Page.description', '説明文') ?></th>
  307. <td class="col-input">
  308. <?php echo $bcForm->input('Page.description', array('type' => 'textarea', 'cols' => 60,'rows' => 2, 'maxlength' => 255, 'counter' => true)) ?>
  309. <?php echo $html->image('admin/icn_help.png',array('id' => 'helpDescription', 'class' => 'btn help', 'alt' => 'ヘルプ')) ?>
  310. <?php echo $bcForm->error('Page.description') ?>
  311. <div id="helptextDescription" class="helptext">
  312. <ul>
  313. <li>説明文はMetaタグのdescription属性に利用されます</li>
  314. <li>他のページと重複しない説明文を推奨します</li>
  315. <li>Metaタグを出力する場合はレイアウトテンプレートに次のように記述します<br />
  316. &lt;?php $bcBaser->description() ?&gt;<br />
  317. <small> 省略した場合上記タグではサイト基本設定で設定された説明文が出力されます</small></li>
  318. </ul>
  319. </div>
  320. </td>
  321. </tr>
  322. <tr>
  323. <th class="col-head"><?php echo $bcForm->label('Page.contents', '本文') ?></th>
  324. <td class="col-input">
  325. <?php echo $bcForm->ckeditor('Page.contents',
  326. array('cols' => 60, 'rows' => 20),
  327. $ckEditorOptions1) ?>
  328. <?php echo $bcForm->error('Page.contents') ?>
  329. </td>
  330. </tr>
  331. <tr>
  332. <th class="col-head"><?php echo $bcForm->label('Page.status', '公開状態') ?>&nbsp;<span class="required">*</span></th>
  333. <td class="col-input">
  334. <?php echo $bcForm->input('Page.status', array(
  335. 'type' => 'radio',
  336. 'options' => array(0 => '非公開', 1 => '公開') ,
  337. 'legend' => false,
  338. 'separator' => '&nbsp;&nbsp;')) ?>
  339. <?php echo $bcForm->error('Page.status') ?>
  340. &nbsp;&nbsp;
  341. <?php echo $bcForm->dateTimePicker('Page.publish_begin', array('size' => 12, 'maxlength' => 10), true) ?>
  342. &nbsp;&nbsp;
  343. <?php echo $bcForm->dateTimePicker('Page.publish_end', array('size' => 12, 'maxlength' => 10), true) ?><br />
  344. <?php echo $bcForm->input('Page.exclude_search', array('type' => 'checkbox', 'label' => 'サイト内検索の検索結果より除外する')) ?>
  345. <?php echo $bcForm->error('Page.publish_begin') ?>
  346. <?php echo $bcForm->error('Page.publish_end') ?>
  347. </td>
  348. </tr>
  349. <tr>
  350. <th class="col-head"><?php echo $bcForm->label('Page.author_id', '作成者') ?></th>
  351. <td class="col-input">
  352. <?php if(isset($user) && $user['user_group_id'] == 1): ?>
  353. <?php echo $bcForm->input('Page.author_id', array('type' => 'select', 'options' => $users)) ?>
  354. <?php echo $bcForm->error('Page.author_id') ?>
  355. <?php else: ?>
  356. <?php if(isset($users[$bcForm->value('Page.author_id')])): ?>
  357. <?php echo $users[$bcForm->value('Page.author_id')] ?>
  358. <?php endif ?>
  359. <?php echo $bcForm->hidden('Page.author_id') ?>
  360. <?php endif ?>
  361. </td>
  362. </tr>
  363. <?php if($reflectMobile): ?>
  364. <tr id="RowReflectMobile" style="display: none">
  365. <th class="col-head"><?php echo $bcForm->label('Page.status', 'モバイル') ?></th>
  366. <td class="col-input">
  367. <?php echo $bcForm->input('Page.reflect_mobile', array('type' => 'checkbox', 'label'=>'モバイルページとしてコピー')) ?>
  368. <?php echo $html->image('admin/icn_help.png', array('id' => 'helpReflectMobile', 'class' => 'btn help', 'alt' => 'ヘルプ')) ?>
  369. <div id="helptextReflectMobile" class="helptext">
  370. <ul>
  371. <li>このページのデータを元にモバイルページとしてコピーする場合はチェックを入れます</li>
  372. <li>モバイルページはモバイルカテゴリの同階層に保存します</li>
  373. <li>モバイルページが既に存在するする場合は上書きします</li>
  374. </ul>
  375. </div>
  376. <?php if(!empty($mobileExists)): ?>
  377. <br />&nbsp;<?php $bcBaser->link('≫ モバイルページの編集画面に移動', array($mobileExists)) ?>
  378. <?php endif ?>
  379. </td>
  380. </tr>
  381. <?php endif ?>
  382. <?php if($reflectSmartphone): ?>
  383. <tr id="RowReflectSmartphone" style="display: none">
  384. <th class="col-head"><?php echo $bcForm->label('Page.status', 'スマートフォン') ?></th>
  385. <td class="col-input">
  386. <?php echo $bcForm->input('Page.reflect_smartphone', array('type' => 'checkbox', 'label'=>'スマートフォンページとしてコピー')) ?>
  387. <?php echo $html->image('admin/icn_help.png', array('id' => 'helpReflectSmartphone', 'class' => 'btn help', 'alt' => 'ヘルプ')) ?>
  388. <div id="helptextReflectSmartphone" class="helptext">
  389. <ul>
  390. <li>このページのデータを元にスマートフォンページとしてコピーする場合はチェックを入れます</li>
  391. <li>スマートフォンページはスマートフォンカテゴリ内の同階層に保存します</li>
  392. <li>スマートフォンページが既に存在するする場合は上書きします</li>
  393. </ul>
  394. </div>
  395. <?php if(!empty($smartphoneExists)): ?>
  396. <br />&nbsp;<?php $bcBaser->link('≫ スマートフォンページの編集画面に移動', array($smartphoneExists)) ?>
  397. <?php endif ?>
  398. </td>
  399. </tr>
  400. <?php endif ?>
  401. </table>
  402. </div>
  403. <div class="submit">
  404. <?php if($this->action == 'admin_add'): ?>
  405. <?php echo $bcForm->button('登録', array('div' => false, 'class' => 'btn-red button', 'id' => 'btnSave')) ?>
  406. <?php echo $bcForm->button('保存前確認', array('div' => false, 'class' => 'btn-green button', 'id' => 'BtnPreview')) ?>
  407. <?php elseif ($this->action == 'admin_edit'): ?>
  408. <?php if($editable): ?>
  409. <?php echo $bcForm->button('更新', array('label' => '更新', 'div' => false, 'class' => 'btn-orange button', 'id' => 'btnSave')) ?>
  410. <?php endif ?>
  411. <?php echo $bcForm->button('保存前確認', array('div' => false, 'class' => 'btn-green button', 'id' => 'BtnPreview')) ?>
  412. <?php if($editable): ?>
  413. <?php $bcBaser->link('削除',
  414. array('action'=>'delete', $bcForm->value('Page.id')),
  415. array('class'=>'btn-gray button'),
  416. sprintf('%s を本当に削除してもいいですか?', $bcForm->value('Page.name')),
  417. false); ?>
  418. <?php endif ?>
  419. <?php endif ?>
  420. </div>
  421. <?php echo $bcForm->end() ?>