Jump to content
Friedrich

Adding image field to language

Recommended Posts

Hello,

I noticed today some strange behaviour in connection with the multi-language plugin.

I wanted to create a multi-language page and to display the languages in the frontend. To make it more fancy I wanted to add a flag icon to every language. So I used an image field I already had (image_small) and added it to the language-template. So far so good. Then I uploaded two icons and tried to fetch them in the frontend.

I have the languages default (English/Englisch) and de (German/Deutsch) and the following code:

<?php
echo 'active|'.$user->language->image_small->url;
foreach($languages as $language) {
    echo $language->title.'|'.$language->image_small->url;
}
?>

Result on an english page:

active |/site/assets/files/1021/united-states.png
English |/site/assets/files/1021/united-states.png
Deutsch|/site/assets/files/1081/
 
Result on a german page:
active|/site/assets/files/1081/
English|/site/assets/files/1021/
Deutsch|/site/assets/files/1081/
 
Somehow he can't get the German flag image at all and only the English page the English flag.
 
But if I'm fetching the images from the $languages variable, it works. So I use this temporary as a workaround:
 
<?php
echo 'active|'.$languages->get($user->language->name)->image_small->url;
foreach($languages as $language) {
    echo $language->title.'|'.$languages->get($language->name)->image_small->url;
}
?>
 

Result English:

active|/site/assets/files/1021/united-states.png
English|/site/assets/files/1021/united-states.png
Deutsch|/site/assets/files/1081/german.png
 
Result German:
active|/site/assets/files/1081/german.png
English|/site/assets/files/1021/united-states.png
Deutsch|/site/assets/files/1081/german.png
 
Everything is fine with this workaround. But why isn't working with the first code? Thanks for any help.
 
Environment:
PHP 5
ProcessWire 2.7.2

Share this post


Link to post
Share on other sites
Environment:
PHP 5
ProcessWire 2.7.2

Can you please be more specific on the version of PHP that you are using (i.e. 5.3.8, 5.4, 5.5 or 5.6)?

Share this post


Link to post
Share on other sites

I've stumbled over the same behavior a few days ago running PHP 7 and PW version 3.0.15, so it's not limited to either of those.

Share this post


Link to post
Share on other sites

I've stumbled over the same behavior a few days ago running PHP 7 and PW version 3.0.15, so it's not limited to either of those.

That's good to know and will help in getting this problem resolved.  The question was asked because the OP stated PHP 5, which would be less than what's required to run ProcessWire.

Share this post


Link to post
Share on other sites

Sorry, forgot to mention it. It is PHP 5.5.9.

Oh, you had the same error in version 3. Then it seems to be not fixed yet (if this is actually a bug).

Share this post


Link to post
Share on other sites

Hello. I just decided today to get rid of the language names and use flags for a project of mine and got the same issue mentioned by @Friedrich and @BitPoet after setting my languages to Bulgarian (default), English and Russian. For both  - the Russian and English language the icon shows promptly, however only for the Bulgarian one (most likely for the default one) the url does not point to the file but to the folder with the language ID (in my case: site/assets/files/1010

To make the image working, I had to modify a bit the code to check if the language is Bulgarian and add the file name:

<?php
// Showing the language flags
// remember what language is set to
$savedLanguage = $user->language;
$icon = '';

echo "<span style='margin-left:34px;'>";

foreach($languages as $language) {

// if user is already viewing the page in this language, skip it
if($language->id == $savedLanguage->id) continue;

// if this page isn't viewable (active) for the language, skip it
if(!$page->viewable($language)) continue;

// set the user's language, so that the $page->url and any other
// fields we access from it will be reflective of the $language
$user->language = $language;

// ID 1010 is of my Bulgarian (problematic language)  
if($language->id == '1010' ) {
$icon = $language->lang_flag->url . "bulgaria.png";
} else {
$icon = $language->lang_flag->url;
}
// output a link to this page in the other language
echo "<span style='margin-left:10px;'><a href='$page->url'><img src='{$icon}'></a></span>";
}
echo "</span>";
// restore the original language setting
$user->language = $savedLanguage;
?>

Has anyone had a similar case and found some more elegant solution than checking for the language ID and manually assigning the file name after $lang_flag->url ?

Share this post


Link to post
Share on other sites

@ottogal Thank you for the impressive reading. Will redo my language selector keeping the flag as the customer requested it, but will also put the language name so that it is clear what language is used. And yes, I will make sure that every language name is written as per the country standard.

Share this post


Link to post
Share on other sites
8 hours ago, MilenKo said:

keeping the flag as the customer requested it

No chance to make the customer read it, too?

Share this post


Link to post
Share on other sites

Well after your reading I went back to suggest to the "customer" who is a close friend of mine and shared the reading. So now we agreed to have the language names versus the flags or even add a dropdown box listing some countries that speak the selected languages.

Thanks again for the sharing.

  • Like 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By snobjorn
      Here's my Norwegian language pack for ProcessWire. I've been adding translations over some time, to suit my own projects users needs.
      Last updated:
      2019/06/19 (June 19, 2019)
      Status:
      Not yet complete. Translations that non-superusers will see is prioritized.
      Name:
      ProcessWire-Norwegian-Language-Pack-nb-NO
      Translated using:
      ProcessWire 3.0.133 dev
      Number of files:
      189 wire files and 95 site files – ranging from just started to completely translated. The site files includes translation some free and some pro modules, see the complete list in the README.md at GitHub.
      Available at GitHub:
      https://github.com/snobjorn/processwire-norwegian-language-pack-nb-no
    • By PawelGIX
      Can I convert uploaded images to PNG, GIF, BMP -> JPEG?
      Is there any function in the API that I can change the file type?
    • By EyeDentify
      Hello Gentlemen and Ladies.

      I have not posted for a while but now i need your help figuring out some things.
      The Documentation has come a long way and i love it.
      Though on the page:
      https://processwire.com/api/ref/pageimages/

      I am trying to figure out if when i want to add an image to an existing image field with multiple images alldready in it and using the method $page->images->add()
      <?PHP /* get the images object array for the Page */ $myPageImg = $page->images; /* define the image to add */ $newImg = 'http://www.somesite.com/image.jpg'; /* Thanks Autofahrn, forgot about the output formating */ $page->of(false); /* create a new Pageimage object with the given URL and add to the Pageimages array */ $myPageImg->add($newImg); /* save the page */ $page->save(); ?> I am pretty sure i missed a few steps in the code above?
      Is that string suppose to be an URL like "http://www.somesite.com/image.jpg" and the method will automaticly download the image and create an Pageimage Object and add it to Pageimages array or does it have to exist on the host first and i supply a file path to that image?

      I guess im confused about that, hope you guys could clarify that for me.

      And if it needs to be allready downloaded to my host before adding the image, what would be the best API methods for that task?
      Just point me in the right direction and i will figure it out.
      Sorry for the bad explaination but i could not figure out a better way of asking.

      Thanks in advance.
      /EyeDentify
    • By louisstephens
      Hopefully this is the right place, if not, please move it to the proper sub. I installed the multi language module on my development (sandbox) set up not too long ago to test out a few things. From the start, I ran into some issues with dependencies not being met/installed, so I thought that I would simply just uninstall what had been. Unfortunately, that took me down a road of using some code in my home template to remove the modules (cant find it at the moment). After some struggling, I finally got it uninstalled, but it left behind 3 fields,
      language language_files language_files_site I thought that I could simply remove them from the languages template and then delete them, but I get the following error:

      I was wondering, is there a way to remove these using the api? I couldn't add any new users to the setup until I made "language" not required, but I was hoping to just remove all of the fields.
    • By bartelsmedia
      "Deepl" is an unbelievably good (paid) text translation service, that mops the floor with Google Translate.
      They have an API and it would be awesome, if there would be a module, that would integrate it for easy content translation.
      It could be a right-click context menu on the language tab:

      It should ask from which of available other language it shall take translate from.
      What do you think?
×
×
  • Create New...