function faq_get_child_categories_faqs in Frequently Asked Questions 7
Same name and namespace in other branches
- 5.2 faq.module \faq_get_child_categories_faqs()
- 6 faq.module \faq_get_child_categories_faqs()
- 7.2 faq.module \faq_get_child_categories_faqs()
Helper function for retrieving the sub-categories faqs.
Parameters
object $term: The category / term to display FAQs for.
string $theme_function: Theme function to use to format the Q/A layout for sub-categories.
int $default_weight: Is 0 for $default_sorting = DESC; is 1000000 for $default_sorting = ASC.
string $default_sorting: If 'DESC', nodes are sorted by creation date descending; if 'ASC', nodes are sorted by creation date ascending.
string $category_display: The layout of categories which should be used.
string $class: CSS class which the HTML div will be using. A special class name is required in order to hide and questions / answers.
string $parent_term: The original, top-level, term we're displaying FAQs for.
Return value
string Returns markup.
5 calls to faq_get_child_categories_faqs()
- template_preprocess_faq_category_hide_answer in includes/
faq.hide_answer.inc - Create categorized FAQ page if set to show answer when question is clicked.
- template_preprocess_faq_category_new_page in includes/
faq.new_page.inc - Create categorized FAQ page if set to show answer in a new page.
- template_preprocess_faq_category_questions_inline in includes/
faq.questions_inline.inc - Create categorized FAQ page if set to show/hide the questions inline.
- template_preprocess_faq_category_questions_top in includes/
faq.questions_top.inc - Create categorized questions for FAQ page if set to show questions on top.
- template_preprocess_faq_category_questions_top_answers in includes/
faq.questions_top.inc - Create categorized answers for FAQ page if set to show the questions on top.
File
- ./
faq.module, line 1369 - The FAQ module allows users to create a FAQ page, with questions and answers displayed in different styles, according to the settings.
Code
function faq_get_child_categories_faqs($term, $theme_function, $default_weight, $default_sorting, $category_display, $class, $parent_term = NULL) {
$output = array();
$list = taxonomy_get_children($term->tid);
if (function_exists('i18n_taxonomy_localize_terms')) {
$list = i18n_taxonomy_localize_terms($list);
}
if (!is_array($list)) {
return '';
}
foreach ($list as $tid => $child_term) {
$child_term->depth = $term->depth + 1;
if (faq_taxonomy_term_count_nodes($child_term->tid)) {
$query = db_select('node', 'n');
$ti_alias = $query
->innerJoin('taxonomy_index', 'ti', '(n.nid = %alias.nid)');
$td_alias = $query
->innerJoin('taxonomy_term_data', 'td', "({$ti_alias}.tid = %alias.tid)");
$w_alias = $query
->leftJoin('faq_weights', 'w', "%alias.tid = {$ti_alias}.tid AND n.nid = %alias.nid");
$query
->fields('n', array(
'nid',
))
->condition('n.type', 'faq')
->condition('n.status', 1)
->condition("{$ti_alias}.tid", $child_term->tid)
->addTag('node_access');
$default_weight = 0;
if ($default_sorting == 'ASC') {
$default_weight = 1000000;
}
// Works, but involves variable concatenation - safe though, since
// $default_weight is an integer.
$query
->addExpression("COALESCE(w.weight, {$default_weight})", 'effective_weight');
// @codingStandardsIgnoreStart
// @todo Doesn't work in Postgres.
//$query->addExpression('COALESCE(w.weight, CAST(:default_weight as SIGNED))', 'effective_weight', array(':default_weight' => $default_weight));
// @codingStandardsIgnoreEnd
$query
->orderBy('effective_weight', 'ASC')
->orderBy('n.sticky', 'DESC');
if ($default_sorting == 'ASC') {
$query
->orderBy('n.created', 'ASC');
}
else {
$query
->orderBy('n.created', 'DESC');
}
if (module_exists('i18n_select')) {
$query
->condition('n.language', i18n_select_langcodes());
if (module_exists('i18n_taxonomy')) {
$query
->condition("{$td_alias}.language", i18n_select_langcodes());
}
}
// We only want the first column, which is nid, so that we can load all
// related nodes.
$nids = $query
->execute()
->fetchCol();
$data = node_load_multiple($nids);
$output[] = theme($theme_function, array(
'data' => $data,
'display_header' => 1,
'category_display' => $category_display,
'term' => $child_term,
'class' => $class,
'parent_term' => $parent_term,
));
}
}
return $output;
}