OJS OCS OMP OHS

You are viewing the PKP Support Forum | PKP Home Wiki



Developing a block plugin, how to define where to be display

OJS development discussion, enhancement requests, third-party patches and plug-ins.

Moderators: jmacgreg, btbell, michael, bdgregg, barbarah, asmecher

Forum rules
The Public Knowledge Project Support Forum is moving to http://forum.pkp.sfu.ca

This forum will be maintained permanently as an archived historical resource, but all new questions should be added to the new forum. Questions will no longer be monitored on this old forum after March 30, 2015.

Developing a block plugin, how to define where to be display

Postby juli » Thu Aug 02, 2012 1:25 am

Hi all!

I'm working in a announcement block to display the last 3 announcemnts in the sidebar with a block. I have it working but it's only displayed in the admin sections, like configuration.

The code is based on the 'developed by' plugin adding the getContents to pass the announcemnts data to block.tpl.

Anyone can help me? any indication will be welcome!

thanks a lot!

AnnouncementsBlockPlugin.inc.php:
Code: Select all

import('lib.pkp.classes.plugins.BlockPlugin');

class AnnouncementsBlockPlugin extends BlockPlugin {

  function getEnabled() {
    if (!Config::getVar('general', 'installed')) return true;
    return parent::getEnabled();
  }

  function getInstallSitePluginSettingsFile() {
    return $this->getPluginPath() . '/settings.xml';
  }

  function getContextSpecificPluginSettingsFile() {
    return $this->getPluginPath() . '/settings.xml';
  }

  function getBlockContext() {
    if (!Config::getVar('general', 'installed')) return BLOCK_CONTEXT_RIGHT_SIDEBAR;
    return parent::getBlockContext();
  }

  function getSeq() {
    if (!Config::getVar('general', 'installed')) return 1;
    return parent::getSeq();
  }

  function getDisplayName() {
    return __('plugins.block.Announcements.displayName');
  }

  function getDescription() {
    return __('plugins.block.Announcements.description');
  }

  function getContents(&$templateMgr) {
    $journal =& Request::getJournal();

    $limitRecentItems = true;
    $recentItems = 3;

    $announcementDao =& DAORegistry::getDAO('AnnouncementDAO');
    $journalId = $journal->getId();
    if ($limitRecentItems && $recentItems > 0) {
      import('lib.pkp.classes.db.DBResultRange');
      $rangeInfo = new DBResultRange($recentItems, 1);
      $announcements =& $announcementDao->getAnnouncementsNotExpiredByAssocId(ASSOC_TYPE_JOURNAL, $journalId, $rangeInfo);
    } else {
      $announcements =& $announcementDao->getAnnouncementsNotExpiredByAssocId(ASSOC_TYPE_JOURNAL, $journalId);
    }

    $lastDateUpdated = '';
    if ($announcements->wasEmpty()) {
      if (empty($lastDateUpdated)) {
        $dateUpdated = Core::getCurrentDate();
        $announcementBlockPlugin->updateSetting($journal->getId(), 'dateUpdated', $dateUpdated, 'string');
      } else {
        $dateUpdated = $lastDateUpdated;
      }
    }

    $templateMgr =& TemplateManager::getManager();
    $templateMgr->assign_by_ref('announcements', $announcements->toArray());
    $templateMgr->assign_by_ref('journal', $journal);

    return parent::getContents($templateMgr);
  }
}


settings.xml
Code: Select all
<plugin_settings>
  <setting type="bool">
    <name>enabled</name>
    <value>true</value>
  </setting>
  <setting type="int">
    <name>seq</name>
    <value>0</value>
  </setting>
  <setting type="int">
    <name>context</name>
    <value>2</value><!-- BLOCK_CONTEXT_RIGHT_SIDEBAR -->
  </setting>
</plugin_settings>


block.tpl
Code: Select all
<div class="block" id="sidebarAnnouncements">
  <h2 class="blockTitle" id="announcements">{translate key="plugins.block.Announcements.blockTitle"}</h2>
  <ul>
    {foreach from=$announcements item=announcement}
      <li class="announcementElement"><a href="{url page="announcement" op="view" path=$announcement->getId()}" cass="announcementTitle">
        <h3>{$announcement->getLocalizedTitleFull()|strip|escape:"html"}</h3>
        {if $announcement->getLocalizedDescription()}
          <!--div class="announcementDescription">{$announcement->getLocalizedDescription()|strip|escape:"html"}</div-->
        {/if}
      </a></li>
    {/foreach}
  </ul>

</div>
juli
 
Posts: 13
Joined: Mon Jul 16, 2012 1:18 am

Re: Developing a block plugin, how to define where to be dis

Postby juli » Fri Aug 03, 2012 1:26 am

Hi all!

a good documentation is always the solution! I found this wiki link: http://pkp.sfu.ca/wiki/index.php/Writing_a_Block_Plugin and executing the last pas I solved my problem!

the solution:
Code: Select all
php tools/upgrade.php upgrade
juli
 
Posts: 13
Joined: Mon Jul 16, 2012 1:18 am

Re: Developing a block plugin, how to define where to be dis

Postby anfemora » Tue Sep 17, 2013 3:32 pm

Hi juli!
Could you please explain more precisely how you did it?
I would like to show a custom, very simple block on a sidebar, but only in the static pages, not in the rest.
How could that be done? I cannot write php, so some code indications would be very useful to me.
Thank you!
anfemora
 
Posts: 2
Joined: Thu Mar 14, 2013 9:42 am


Return to OJS Development

Who is online

Users browsing this forum: Google [Bot] and 1 guest