Jump to content

Hanna Code


ryan

Recommended Posts

You could check with your host to see if they are running mod_security.

Thanks! I had a look at my host's documentation, and it turns out they are running mod_security. With that turned off, Hanna Code is working properly with php codes back end again.

I've been using PhpMyAdmin to create/edit Hanna Codes the last few weeks. Works fine, but I do not like messing around in there. So your solution, Robin S, was very welcome!

Link to comment
Share on other sites

  • 2 weeks later...

After searching for a way to load a JS library once when looping through multiple hanna-codes (of the same type) at a page, I came up with the following solution;

if (!isset($hanna->jsloaded)) $this->config->scripts->append('myJS.js');
$hanna->jsloaded = 1;

// do other stuff

Is this the correct way to do such loading? Session- or normal variables cannot be used since they keep on remembering or resetting the values during the process of loading pages (ones or multiple times).

Link to comment
Share on other sites

There's no 'correct' way, something like this might also work.

<?php
// Cache outputformatting to a variable
$of = $page->of();
// Put it off, as Hannacode relies on outputformatting isn't it?
$page->of(false);
// Search if we have a hanna tag like thingy
if (strpos($page->body, '[[') !== false) {
    // Yay, we have [[, so at least a Hanna tag like thingy.
    // You could search for a specific hanna tag if wanted
    // Do Script injection.... what ever
}
// Restore to previous state of outputformatting
$page->of($of);

Link to comment
Share on other sites

Hi Martijn,

Well, I'm not sure this will do since my code needs the JS library only once.

In my case (charts-module :)) I need to load the highcharts library only once, but the page (body) can have multiple instances of hanna code;

[[chart item=a period=month]]
some text here
[[chart item=b period=3months]]
//and so on...

...and in case we have other hanna-codes in the body/page, I need to make sure my library is already added or if I still need to load it.

Link to comment
Share on other sites

<?php

/**

* Do this before outputting the scripts array (before a 'view' file)

*

*/

// Cache outputformatting to a variable

$of = $page->of();

// Put it off, as Hannacode works with outputformatting isn't it?

$page->of(false);

$schlaghecke = array(

'[[chart item=a period=month]]' => '/file/to/add/month.js',

'[[chart item=a period=3months]]' => '/file/to/add/3months.js',

)

foreach ($schlaghecke as $hanna => $file) {

if (strpos($page->body, $hanna) !== false) {

// is always unique

$config->scripts->append($file);

}

}

// Restore to previous state of outputformatting

$page->of($of);

Link to comment
Share on other sites

A project that I started at Agrio. (Now have an other Job) They nice folks over there are continuing that project so that makes me happy :-). I guess they have to do mainly front-end work now. Probably they make it a JSON API... Thats the way I would have gone.

  • Like 1
Link to comment
Share on other sites

@tpr, actually it is. I love the new Job but moved away from Agrio with very good feelings. I realy like the guys/girls over there. There were multiple parts to that project, one part was the content management in ProcessWire. It works quite nice and I feel good about it. 

  • Like 1
Link to comment
Share on other sites

That's great and I was sure about that reading your post.

But those two sentences just made me laugh, they read like something really awkward has happened :)

(maybe I've watched too many Monthy Pythons back then :))

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

Does TextFormatterHannaCode need to be so large? The bundled version of Ace contains all 4 versions of the Javascript files, but in ProcessHannaCode.module I can only see the src-min version being called in. Removing these and the demo directory would reduce the size of the module by around 38MB. Are there licensing issues which require that these files must be present?

  • Like 4
Link to comment
Share on other sites

Does TextFormatterHannaCode need to be so large?

I've also wondered this, and I think it would be good to have an option in the module config to disable Ace so it can be removed altogether for those who would prefer this. The Code tab for all my hannas looks like this:

<?php
include($config->paths->templates . "hannas/my_hanna_code.php");

...because I much prefer to edit hanna codes in my IDE. So I don't really need Ace bundled into the module.

Link to comment
Share on other sites

i think the best option is to remove the ACE completely and then have the module simply check to see if the Ace Extended module is installed, if it is, then use that and init for PHP; otherwise show a normal text area;

the module could show a link to install Ace extended for those who want to edit their codes in the admin.

I have a module that does this, and it so far works fine...

  • Like 3
Link to comment
Share on other sites

  • 3 weeks later...

Just saw: When you try to check for updates you get the message

Error reported by web service: Unable to find that module

instead of the correct one:

Current installed version is already up-to-date

Link to comment
Share on other sites

  • 3 weeks later...

Hey, I've searched the forum but couldn't find what I needed. I have a textfield field with the Hanna Code text formatter applied but I can't use more than one Hanna Code in it. It'll only display the output of the last one and even that overwrites the rest of the content in the textfield. What am I doing wrong? Each code just echoes the value of a field from a page ( e.g. echo $page->get(103)->field ).

Link to comment
Share on other sites

@seanmvincent

That sounds like a PHP error is occurring. If you turn on PW's debug mode do you see any error messages?

Also, it looks like there is a mistake in the example code in your post. I think you want $pages->get() not $page->get().

Link to comment
Share on other sites

Thanks @Robin S. I have debug enabled but no errors are showing. And yeah, in my actual code it is $pages->get not $page->get. Could it be because the page field that I'm getting and displaying can also include Hanna code? It doesn't, but the field allows it.

Link to comment
Share on other sites

  • 4 weeks later...

How would I go about if I wanted to be able to custom sort pages referenced in a Hanna Code?

Example, I want to sort the output that is the title for pages these ids, in the order specified below:

[[houses id=10|20|40|30]]

I have tried different sort options, such as sort=sort or without sort, in the PHP. But these will look for the order in the page tree and such.

Link to comment
Share on other sites

14 hours ago, laban said:

How would I go about if I wanted to be able to custom sort pages referenced in a Hanna Code?

I think your question relates more to how PW sorts PageArrays created via find() rather than Hanna Code specifically. I guess you are doing something like this in your PHP:

$my_pages = $pages->find("id=1086|1021|1053|1018");

I was surprised to discover, as you did, that the resulting PageArray does not sort the pages in the order the IDs were given.

This is what I came up with as a workaround:

$my_ids = [1086,1021,1053,1018];
$my_pages = new PageArray();
foreach($my_ids as $id) {
    $my_pages->push($pages($id));
}

I'd be keen to hear if there is a better way to get pages into a PageArray while maintaining a given order of page IDs.

  • Like 2
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...