Bootstrapping Font Awesome in Elgg 2.X

I had Font Awesome linked to Elgg in views/default/page/default.php in Elgg 1.9

<?php
/**
 * Elgg pageshell
 * The standard HTML page shell that everything else fits into
 *
 * @package Elgg
 * @subpackage Core
 *
 * @uses $vars['title']       The page title
 * @uses $vars['body']        The main content of the page
 * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages()
 */

// backward compatability support for plugins that are not using the new approach
// of routing through admin. See reportedcontent plugin for a simple example.
if (elgg_get_context() == 'admin') {
    if (get_input('handler') != 'admin') {
        elgg_deprecated_notice("admin plugins should route through 'admin'.", 1.8);
    }
    elgg_admin_add_plugin_settings_menu();
    elgg_unregister_css('elgg');
    echo elgg_view('page/admin', $vars);
    return true;
}

// render content before head so that JavaScript and CSS can be loaded. See #4032
$topbar = elgg_view('page/elements/topbar', $vars);
$messages = elgg_view('page/elements/messages', array('object' => $vars['sysmessages']));
$header = elgg_view('page/elements/header', $vars);
$body = elgg_view('page/elements/body', $vars);
$footer = elgg_view('page/elements/footer', $vars);

// Set the content type
header("Content-type: text/html; charset=UTF-8");

$lang = get_current_language();
// INSERT BOOTSTRAP ON LINE 42
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang; ?>" lang="<?php echo $lang; ?>">
<head>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<?php echo elgg_view('page/elements/head', $vars); ?>
</head>
<body>
<div class="elgg-page elgg-page-default">
    <div class="elgg-page-messages">
        <?php echo $messages; ?>
    </div>
    <div class="elgg-page-topbar">
        <div class="elgg-inner">
            <?php echo $topbar; ?>
        </div>
    </div>
    <div class="elgg-page-header">
        <div class="elgg-inner">
            <?php echo $header; ?>
        </div>
    </div>
    <div class="elgg-page-body">
        <div class="elgg-inner">
            <?php echo $body; ?>
        </div>
    </div>
    <div class="elgg-page-footer">
        <div class="elgg-inner">
            <?php echo $footer; ?>
        </div>
    </div>
</div>
<?php echo elgg_view('page/elements/foot'); ?>
</body>
</html>

Where, in the new 2.3 code, am I supposed to insert the <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> line?

<?php
/**
 * Elgg pageshell
 * The standard HTML page shell that everything else fits into
 *
 * @package Elgg
 * @subpackage Core
 *
 * @uses $vars['head']        Parameters for the <head> element
 * @uses $vars['body_attrs']  Attributes of the <body> tag
 * @uses $vars['body']        The main content of the page
 * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages()
 */

// backward compatability support for plugins that are not using the new approach
// of routing through admin. See reportedcontent plugin for a simple example.
if (elgg_get_context() == 'admin') {
    _elgg_admin_add_plugin_settings_menu();
    elgg_unregister_css('elgg');
    echo elgg_view('page/admin', $vars);
    return true;
}

// render content before head so that JavaScript and CSS can be loaded. See #4032

$messages = elgg_view('page/elements/messages', array('object' => $vars['sysmessages']));

$header = elgg_view('page/elements/header', $vars);
$content = elgg_view('page/elements/body', $vars);
$footer = elgg_view('page/elements/footer', $vars);

$body = <<<__BODY
<div class="elgg-page elgg-page-default">
    <div class="elgg-page-messages">
        $messages
    </div>
__BODY;

$body .= elgg_view('page/elements/topbar_wrapper', $vars);

$body .= <<<__BODY
    <div class="elgg-page-header">
        <div class="elgg-inner">
            $header
        </div>
    </div>
    <div class="elgg-page-body">
        <div class="elgg-inner">
            $content
        </div>
    </div>
    <div class="elgg-page-footer">
        <div class="elgg-inner">
            $footer
        </div>
    </div>
</div>
__BODY;

$body .= elgg_view('page/elements/foot');

$head = elgg_view('page/elements/head', $vars['head']);

$params = array(
    'head' => $head,
    'body' => $body,
);

if (isset($vars['body_attrs'])) {
    $params['body_attrs'] = $vars['body_attrs'];
}

echo elgg_view("page/elements/html", $params);

 

 

  • Where, in the new 2.3 code

    In start.php of your plugin :)

    elgg_register_plugin_hook_handler('head', 'page', 'my_setup_head');
    
    function my_setup_head($hook, $type, $return, $params) {
    
        $return['links'] = false;
        
        $return['links'][] = array(
            'rel' => 'stylesheet',
            'type' => 'text/css',
            'href' => '//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css',
        );
    
        return $return;
    }
  • Thanks. But now I'm getting tons of fatal errors. "Redirect could not be issued due to headers already being sent. Halting execution for security."

    Never mind. I'll just use the default Elgg icons.

  • You probably introduced some whitespace at the end of your start.php

    Get rid of the php closing tags