Jump to content
Markus (Blue Tomato)

SOLVED: Set value to custom image field via API

Recommended Posts

I'am working on a migration script from the ImageExtra Module to the new Custom Image Fields feature in ProcessWire.

I have some problems while setting a field value to the new custom image field. I have set up the custom field and it works correct in the admin panel but not via the API:

$page->images->my_custom_image_field = "test";
$page->save();

Results into:

Fatal error: Uncaught ProcessWire\WireException: Item 'my_custom_image_field' set to ProcessWire\Pageimages is not an allowed type in /var/www/html/wire/core/WireArray.php:458

 

 

Share this post


Link to post
Share on other sites

I found this new "setFieldValue" function in the pw dev commits: https://github.com/processwire/processwire/commit/573048abb4a6bdec77aee2cbff7d5837de857a05#diff-b4e6cafb51396ac6ada1a538da0ddc8cR639

I tried following:

if($language->id == $languages->getDefault()->id) {
	$page->images->setFieldValue("my_custom_image_field", "test default language");
} else {
	$page->images->setFieldValue("my_custom_image_field__{$language->id}", "test language {$language->name}");
}

I get no error, but all fields are still empty 😞

I will continue my investigations... Maybe @ryan has an idea?

Also strange: the function should return true or false but if I dump the return of setFieldValue, I get only an empty string back.

Share this post


Link to post
Share on other sites

Maybe not related but in the past I always stumbled across two things:

  • code in templates needed a $page->save whenever I changed something in an image field while in a module/hook it wasn't necessary or caused strange errors
  • another thing was that I always had to foreach() through the image field

I try to find an old module I built... images were a huge deal in it.

  • Like 1

Share this post


Link to post
Share on other sites

From what I understand, you have to have the specific image prior to setting any property.

$yourPage->of(false); // turn off output formatting
$yourImage = $yourPage->yourImageField->last(); // get the last image
// $yourImage = $yourPage->yourImageField->eq($index); // or, get specific image by array index
$yourImage->yourCustomField = 'yourValue'; // Set value of custom field
$yourPage->save(); // save the changes

 

  • Like 2

Share this post


Link to post
Share on other sites

Oooh - Thanks that was my problem: I have set the value on the image field and not on the image file!

This works:

if($language->id == $languages->getDefault()->id) {
	$page->images->findOne("basename=xyz.jpg")->set("my_custom_image_field", "test default language");
} else {
	$page->images->findOne("basename=xyz.jpg")->set("my_custom_image_field__{$language->id}", "test language {$language->name}");
}

 

Share this post


Link to post
Share on other sites

Please set the topic to Solved so that others aren't anticipating troubleshooting. You can edit your original post to modify the topic title. Thanks!

Share this post


Link to post
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

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By a.masca
      Goodmorning everyone,
      sorry for the inconvenience but I have a problem that I can't find in any other post.
      Strange things happen on a site:
      - despite everything being configured correctly (as already done in dozens of other sites) only superusers can create new pages
      - if I insert in a selector "include = all" the result is always 0
      - I should restore a series of pages incorrectly inserted in the trash, but I cannot select them with the selector "status = Trash"
      Some idea?
      Thanks so much for your valuable support.
    • By LAPS
      According to this old post, I'm trying to use the PW cache feature:
      $my_page = $pages->get($pageId); if($my_page->viewable()) { $content = $cache->get("my_page"); if(!$content) { $content = renderCustom($my_page->children); $cache->save('my_page', $content, 3600); } echo $content; } function renderCustom(PageArray $items) { foreach($items as $item) { echo $item->title; // ... heavy content loading } } After loading the page which renders the above code, in the admin I can see something was cached (note: I'm using ClearCacheAdmin) :

      But when I reload the page the cached value seems do not be used and the page loads slowly.
      The result of doing var_dump() is the following:
      var_dump($cache); // return object(ProcessWire\WireCache)#20 (0) { } $content = $cache->get("my_page"); var_dump($content); // return string(0) ""  
      What could be the problem?
    • By LAPS
      Can you confirm that the function renderField for fieldset fields, even having the file /site/templates/fields/fieldName.php or /site/templates/fields/fieldName/$file.php (using $file argument), does not render anything as expected?
      $page->renderField('fieldsetName') // returns nothing ... or am I wrong on something?
    • By LAPS
      Hi there,
      I'm working on an email message template and would like to render a custom one to be sent.
      I tried to use $files->render() this way
      // rendering file e.g. a template file or a hook statement in ready.php $body = $files->render('emails/myfile', array( 'myVar1' => $var1, 'myVar2' => $var2, ... )); but $vars seems to be not accessible from within the rendered file. That is, $vars seems to be not set:
      // rendered file emails/myfile.php $myVar1 = $vars['myVar1']; // is not set $myVar2 = $vars['myVar2']; // is not set ... // is not set How can I get the $vars so to properly render the custom message template for sending the email?
       
      Notes:
      By using $files->include() the $vars is accessible but I cannot use this method because I should retrieve the output $body as a return value for sending the email later. So, I'm still looking to render the custom message using $files->render(). This thread is someway related to this one.
    • By Peter Troeger
      Hello 🙂
      I have set up pagination on a mulitlanguage site.
      I've done this before, but this time I have a problem I can't solve.
      Pagination is activated on 'parent-template' and 'child-template' just to be sure 🙂
      This is my code:
      $children = $page->children('limit=1'); foreach($children as $child) { $title = $child->title; echo $title; } echo $children->renderPager(); The navigation is output correctly and the link look correct as well 'parent-page/page2/'.
      But when I click the link, the site seems to redirect back to 'parent-page/
      Any help would be greatly appreciated 🙂
      - Peter
×
×
  • Create New...