Вы здесь

Заголовок (title) из поля

0

Решил реализовать функционал "Вопрос-Ответ", для этих целей title ноды мне не нужен. Т.е. необходимо, чтобы он title брался из поля Вопроса (стандартное поле body). Для реализации этой цели пробую модули Automatic Entity Labels и Automatic Nodetitles. Токен [node:summary] не очень подходит, так как многовато символов берет.
Нашел в интернете токен для обрезки до определенного количества символов.

function custom_title_token_info() {

// Define token value, body_trim is the token will be used as [node:body_trim]
$node_trim['body_trim'] =  array(
    'name' => t("Trimmed body field"),
    'description' => t("Trim body field to 70 characters "),
);
// Return associative array of tokens & token types
return array(
    'tokens' => array(
        'node' => $node_trim,
    ),
);

}

function custom_title_tokens($type, $tokens, array $data = array(), array $options = array()) {

$replacements = array();
// Check if token type is node
if($type == 'node') {
    foreach ($tokens as $name => $original) {
        switch ($name) {
            // Check token is body_trim
            case 'body_trim':
                $body = $data['node']->body[LANGUAGE_NONE][0]['value'];
                // Trim 70 characters and return
                $replacements[$original] = substr(trim(strip_tags($body)), 0, 70) . '...';
                break;
        }
    }
}
return $replacements;

}

При вставке рыбы Lorem Ipsum, периодически вылетает такая ошибка.
PDOException: в функции drupal_write_record() (строка 7333 в файле includes\common.inc).
Используется еще ckeditor.

Версия Drupal: 
7.x
Связанные проекты: 
Automatic NodetitlesToken
Вопрос задан 12.11.2015 - 13:41

Ответы

0
/**
 * Implements hook_node_presave().
 */
function MYMODULE_node_presave($node) {
  if ($node->type == 'answer') {
    // Ваша логика тут
    $node->title = 'my title...'
  }
}
Ответ дан 12.11.2015 - 14:05
Аватар пользователя Niklan
Niklan
445
0

лучше реализовать иначе

в hook_form_alter скрываете поле title

$form['title']['#access'] = FALSE;

потом в hook_node_presave задаете значение title из нужного вам поля

$ask = trim(strip_tags($node->field_ask['und'][0]['value']));
$node->title = mb_substr($ask, 0, 70).'...';
Ответ дан 12.11.2015 - 14:08
0

[node:summary] вроде регулируется в широких пределах в настройках типа материала.

Ответ дан 19.11.2015 - 00:55
-2

я делал модулем Answers и единственно не доделал форму ответа на странице вопроса.
тайтл скрывал в хуке :

function answers_helpers_form_answer_node_form_alter(&$form, &$form_state) {

  // Make title not required and hide it.
  $form['title']['#required'] = FALSE;
  hide($form['title']);

  // Hide Body title
  $form['body'][$form['body']['#language']][0]['#title_display'] ='invisible';

}
Ответ дан 12.11.2015 - 14:26