Jump to content

SOLVED: Set value to custom image field via API


markus_blue_tomato
 Share

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

 

 

Link to comment
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.

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

 

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
 Share

×
×
  • Create New...