You are here

panels_extra_layouts.module in Panels Extra Layouts 6

Same filename and directory in other branches
  1. 7.2 panels_extra_layouts.module
  2. 7 panels_extra_layouts.module

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.module
View 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

Namesort descending 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().