As the developers of Open Journal Systems, Open Conference Systems, Open Harvester Systems, and Open Monograph Press, the PKP team are experts in helping journal managers and conference organizers make the most of their online publishing projects. PKP Publishing Services offers support for:

As a customer of PKP Publishing Services, you will not only receive direct, personalized support from the PKP Development Team, but will be contributing to the ongoing development of the PKP applications. All funds raised by PKP Publishing Services go directly toward enhancing our free, open source software. For more information, please contact us.

I don't have a lot of experience with PHP and I'm new to the OJS framework (which is very nice, btw), so I'm posting my solution here with the hope that someone can suggest to me a better approach, or save themselves some time.

I've created a plugin that generates a horizontal nav menu linking to multiple journals in an OJS installation. In my situation, each journal has a different primary locale. When I visit a non-English journal, the API doesn't easily allow you to retrieve titles for all other journals. The API tries to retrieve each journal's title based on each journal's primary locale, but the title will not appear if the journal hasn't defined a title for all locales, which is prone to human error. For example, if the current journal has a Portuguese primary locale, the title of a journal with Spanish primary locale cannot be retrieved through the API if the user has not defined the Portuguese journal's title in the Spanish locale (or any other locale).

I began by studying the Journal.inc.php and JournalDAO.inc.php files in /classes/journal/. After some frustration with how these classes force all requests through localization (which hides data from other locales), I realized that I would have to create a plugin that duplicates the procedure WITHOUT locale filtering.

Step 1) Journal::getJournals() function does not work for multiple languagesFirst, my plugin had to recreate the function "&_returnJournalFromRow" from /classes/journal/JournalDAO.inc.php for the *sole* purpose of commenting out the $journal->setPrimaryLocale() call. That setPrimaryLocale function was the culprit which filtered out all other journals, and I'm still not sure why.

Step 2) Journal::getJournalTitle() function does not work for multiple languagesOnce I retrieved a list of all enabled journals, I had to work around the Journal::getJournalTitle(). That function will not retrieve a title for journals that haven't defined titles in the current journal's primary locale. Unfortunately, the path of API calls lead to a core DataObject.getData function which ultimately filters by locales, so there's no clean way to bypass this. My solution was to get the journal's raw settings via journal->getSettings(), convert all the locale titles to a numeric array, and retrieve the first index by default.

My plugin template simply relies on the {section} tag to loop through an array of titles and urls. I took this approach because couldn't figure out how to reinsert locale-safe titles into the Journals iterator, and don't know enough about Smarty templating to modify the {url} tag: