Автоматическая генерация заголовков.

Как автоматом генерировать заголовок из контента на двойке?

#1 10 мая 2015 в 19:51
Имеется надобность автоматом заполнять поле "title" при размещении контента в компоненте "Анекдоты". Эти самые анекдоты такой тип контента, который заголовков не имеет по определению. А в админке контент выводится с отображением только заголовков.
Отсель мораль. Нужно либо автоматом генерировать заголовки, либо отображать в админке начало самого контента для работы администраторов с этим контентом.
Для экономии базы было бы предпочтительней отображать в админке первые 30 символов самого контента, а не формировать дополнительные 30 символов в заголовок.
Кто что сможет посоветовать по этому поводу и как можно это реализовать?
#2 10 мая 2015 в 19:59
Посмотрите как это устроено в компоненте FAQ если первая ветка. Тот же принцип
#3 10 мая 2015 в 20:00
Я компонент анекдоты и делал клонировав FAQ
#4 10 мая 2015 в 20:07
Нил,
Аналогично сделано еще в 11-ом годе при помощи Coza Nostra и других понимающих людей:
newostrie.ru/

Потом была предпринята вполне успешная попытка сделать новый компонент на 1.10.6 (из фака, конечно, но отдельный).
otsrie.ru/

Теперь меня посетила безумная мысль запилить всё это на двойке, но наткнулся на целую гряду подводных камней...

Посмотрите как это устроено в компоненте FAQ если первая ветка. Тот же принцип

Нил

Вот как раз в первой ветке в админке отображается сам контент, а во второй пустые строки. Оно хочет заголовков.
#5 3 июня 2015 в 17:30
Разобрался.
Заголовки можно не генерировать и не засорять базу. Вместо этого можно отображать в админке сам контент, если изменить grid_content_items.php следующим образом:



  1. <?php
  2.  
  3. function grid_content_items($controller, $ctype_name=false){
  4.  
  5. $options = array(
  6. 'is_auto_init' => false,
  7. 'is_sortable' => true,
  8. 'is_filter' => true,
  9. 'is_pagination' => true,
  10. 'is_draggable' => false,
  11. 'is_selectable' => true,
  12. 'order_by' => 'id',
  13. 'order_to' => 'desc',
  14. 'show_id' => true
  15. );
  16. $columns_anec = array(
  17. 'id' => array(
  18. 'title' => 'id',
  19. 'width' => 30,
  20. 'filter' => 'exact'
  21. ),
  22. 'content' => array(
  23. 'title' => LANG_TITLE,
  24. 'href' => href_to($ctype_name, 'edit', '{id}') . '?back=' . href_to($controller->name, 'content'),
  25. 'filter' => 'like'
  26. ),
  27. 'date_pub' => array(
  28. 'title' => LANG_DATE,
  29. 'width' => 80,
  30. 'handler' => function($value, $item){
  31. return html_date($value);
  32. }
  33. ),
  34. 'is_pub' => array(
  35. 'title' => LANG_ON,
  36. 'width' => 40,
  37. 'flag' => true,
  38. 'flag_toggle' => href_to($controller->name, 'content', array('item_toggle', $ctype_name, '{id}'))
  39. ),
  40. 'user_nickname' => array(
  41. 'title' => LANG_AUTHOR,
  42. 'href' => href_to('users', '{user_id}'),
  43. 'order_by' => 'u.nickname',
  44. ),
  45. );
  46. $columns = array(
  47. 'id' => array(
  48. 'title' => 'id',
  49. 'width' => 30,
  50. 'filter' => 'exact'
  51. ),
  52. 'title' => array(
  53. 'title' => LANG_TITLE,
  54. 'href' => href_to($ctype_name, 'edit', '{id}') . '?back=' . href_to($controller->name, 'content'),
  55. 'filter' => 'like'
  56. ),
  57. 'date_pub' => array(
  58. 'title' => LANG_DATE,
  59. 'width' => 80,
  60. 'handler' => function($value, $item){
  61. return html_date($value);
  62. }
  63. ),
  64. 'is_pub' => array(
  65. 'title' => LANG_ON,
  66. 'width' => 40,
  67. 'flag' => true,
  68. 'flag_toggle' => href_to($controller->name, 'content', array('item_toggle', $ctype_name, '{id}'))
  69. ),
  70. 'user_nickname' => array(
  71. 'title' => LANG_AUTHOR,
  72. 'href' => href_to('users', '{user_id}'),
  73. 'order_by' => 'u.nickname',
  74. ),
  75. );
  76.  
  77. $actions = array(
  78. 'title' => LANG_VIEW,
  79. 'class' => 'view',
  80. 'href' => href_to($ctype_name, '{slug}.html')
  81. ),
  82. 'title' => LANG_EDIT,
  83. 'class' => 'edit',
  84. 'href' => href_to($ctype_name, 'edit', '{id}') . '?back=' . href_to($controller->name, 'content')
  85. ),
  86. 'title' => LANG_DELETE,
  87. 'class' => 'delete',
  88. 'href' => href_to($ctype_name, 'delete', '{id}') . '?back=' . href_to($controller->name, 'content'),
  89. 'confirm' => LANG_CP_CONTENT_ITEM_DELETE_CONFIRM
  90. )
  91. );
  92. if ($ctype_name=='anec'){
  93. return array(
  94. 'options' => $options,
  95. 'columns' => $columns_anec,
  96. 'actions' => $actions
  97. );
  98. }
  99. else {
  100. return array(
  101. 'options' => $options,
  102. 'columns' => $columns,
  103. 'actions' => $actions
  104. );
  105. }
  106.  
  107. }
Теперь в админке отображается сам текс анекдотов, причем только для анекдотов. Все остальные типы контента отображаются с заголовками.

Теперь проблема следующая. Как обрезать текст анекдота в админке?
subsrt('content',0 ,40) => array(
не прокатывает…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.