How can I change "Default comments per page" array to my own. What hook I need to use, if it needed?
hook_form_FORM_ID_alter(&$form, &$form_state)
with FORM_ID = node_type_form
$form doesn't contain this value
Drupal pulls the number of comments per page from variable_get('comment_default_per_page' . $node->type)
. Its default is 50. To change this go to content type X -> edit, then save.
To change the 50 to something else, you can create you own custom module and have this code
function example_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'node_type_form' && isset($form['comment'])) {
$form['comment']['comment_default_per_page']['#default_value'] = 70;
}
}
If you want to change it somewhere else, then I recommend calling variable_set('comment_default_per_page' . $node->type, 'MYVALUE')
. See below where it is hard-coded
inside comment.module & comment_form:
$form['comment']['comment_default_per_page'] = array(
'#type' => 'select',
'#title' => t('Default comments per page'),
'#default_value' => variable_get('comment_default_per_page_'. $form['#node_type']->type, 50),
'#options' => _comment_per_page(),
'#description' => t('Default number of comments for each page: more comments are distributed in several pages.'),
);
function _comment_get_display_setting($setting, $node) {
global $user;
if (isset($_GET[$setting])) {
$value = $_GET[$setting];
}
else {
// get the setting's site default
switch ($setting) {
case 'mode':
$default = variable_get('comment_default_mode_'. $node->type, COMMENT_MODE_THREADED_EXPANDED);
break;
case 'sort':
$default = variable_get('comment_default_order_'. $node->type, COMMENT_ORDER_NEWEST_FIRST);
break;
case 'comments_per_page':
$default = variable_get('comment_default_per_page_'. $node->type, 50);
}
...
and inside comment_render($node, $cid = 0) {
$comments_per_page = _comment_get_display_setting('comments_per_page', $node);
The default comments per page is stored and changed on the content type itself. In D6 it was stored using variable_set()
but I'm not sure if this is the case for D7.