panels_extra_layouts.module in Panels Extra Layouts 7
Same filename and directory in other branches
panels_extra_layouts.module @author António P. P. Almeida <appa@perusio.net> @date Wed Aug 3 04:36:20 2011
@brief A module providing a series of extra layouts for Panels. Namely two adaptive layouts.
File
panels_extra_layouts.moduleView source
<?php
/**
* @file panels_extra_layouts.module
* @author António P. P. Almeida <appa@perusio.net>
* @date Wed Aug 3 04:36:20 2011
*
* @brief A module providing a series of extra layouts for Panels. Namely two
* adaptive layouts.
*
*
*/
/**
* Implementation of hook_ctools_plugin_directory().
*
* It simply tells panels where to find the .inc files that define various
* types of plugins: layouts, styles, args, contexts, content_types.
*
*/
function panels_extra_layouts_ctools_plugin_directory($owner, $plugin_type) {
// We're just providing layout plugins.
if ($owner == 'panels' && $plugin_type == 'layouts') {
return "plugins/{$plugin_type}";
}
}
// panels_extra_layouts_ctools_plugin_directory
/**
* The mapper function for computing the hash.
*
* @param $x integer
* The index of the content array.
* @return integer
* The sum of all the 2nd digits in a given row of the content array.
*/
function panels_extra_layouts_adaptive_get_digit($x) {
// array_pop requires a variable. Doh no love for FP on PHP :(.
$last_digit = sscanf($x, "%*1d%d");
return empty($x) ? 0 : array_pop($last_digit);
}
// panels_extra_layouts_adaptive_get_digit
/**
* The hashing function is quite simple, hence imperfect. There are some
* exceptions that are handled below to make the way the grid is filled
* consistent.
*
* h(i) = \sum_{i}_{j = 1,n} get_digit(c(i,j))
*
* where i is the row number, j is the column number, c(i,j) is the content of
* entry (i,j) of the content matrix and get_digit is a function that
* returns m given a number nm, e.g., 41, returns 1.
*
* @param $indexes array
* The indexes of a given row of the content array.
* @param $columns integer
* The number of columns in the current 'submatrix'.
* @param $mapper_f string
* The mapper function name.
*
* @return integer
* The hash of a given row.
*/
function panels_extra_layouts_adaptive_hash($indexes = array(), $columns = 3, $mapper_f) {
// Bail out if there are no elements.
if (empty($indexes)) {
return 0;
}
// Count the number of elements in the given row.
$n = count($indexes);
// Compute the hash.
$h = $n == 1 ? 1 : array_sum(array_map($mapper_f, $indexes));
// For 4 columns there are a couple of special cases where the hash is
// ambiguous.
if ($h != 0 && $columns == 4) {
// If we are in a special situation correct it. The hashing function is quite
// naive. It's the sum of the column indexes in each row.
// Some cases we get an incorrect value that needs to be corrected.
if ($n == 2 && $h == 6) {
return 4;
}
if ($n == 2 && ($h == 7 || $h == 5 && panels_extra_layouts_adaptive_get_digit($indexes[1]) == 3)) {
return 3;
}
}
return $h;
}
// panels_extra_layouts_adaptive_hash
Functions
Name![]() |
Description |
---|---|
panels_extra_layouts_adaptive_get_digit | The mapper function for computing the hash. |
panels_extra_layouts_adaptive_hash | The hashing function is quite simple, hence imperfect. There are some exceptions that are handled below to make the way the grid is filled consistent. |
panels_extra_layouts_ctools_plugin_directory | Implementation of hook_ctools_plugin_directory(). |