Jump to content

Recommended Posts

Posted

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

 

 

Posted

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.

Posted

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
Posted

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
Posted

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}");
}

 

Posted

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!

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...