Flashmaster82 Posted May 22, 2018 Share Posted May 22, 2018 echo "<option$selected value='$url'> $language->language_icon $language->title </option>"; Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 22, 2018 Author Share Posted May 22, 2018 I have installed and setup the Multi language URL module. The problem is that i dont know how to display/output and image next to the language in the dropdown menu. Right now i have created a field name language_icon under the language template. I need to output the flag next to the Country name (title). The code below only display (se.svg Sweden). Please help! echo "<option$selected value='$url'> $language->language_icon $language->title </option>"; Link to comment Share on other sites More sharing options...
Macrura Posted May 22, 2018 Share Posted May 22, 2018 Do you mean in the admin page edit? If so, Page Select doesn't support markup, you'd need to use InputfieldSelectize to get a formatted option with an icon.. If you mean in the admin menu, not sure about that... Link to comment Share on other sites More sharing options...
androbey Posted May 23, 2018 Share Posted May 23, 2018 Hi @Flashmaster82, according to your post I assume two things: you try to build a navigation option to switch languages on the frontend of your site you have a plain text field called "language_icon" (and you store there a string representing the filename e.g. se.svg) If the above is not the case, please correct me or follow @macrura's post if you mean the admin page. Otherwise the following: You need to get the path to where the image or icon is stored. If that is e.g. in your site/templates/img folder, one way woul be: $config->urls->templates . "img/" . $language->language_icon Also, to actually display the icon you would have to use an image/picture tag inside the option tag. Link to comment Share on other sites More sharing options...
flydev Posted May 23, 2018 Share Posted May 23, 2018 (edited) This is just a frontend example for inspiration (should work as is) - the flag image is set trough CSS (gf-if and gspr class) but could be an image or whatever. $langswitch = ''; foreach($languages as $language) { if(!$page->viewable($language)) continue; // is page viewable in this language? if($language->id == $user->language->id) { // current user language $langswitch .= "<li class='current'>"; } else { $langswitch .= "<li>"; } $url = $page->localUrl($language); $hreflang = $homepage->getLanguageValue($language, 'name'); $langswitch .= "<a hreflang='$hreflang' href='$url'>$language->title<b class='gf-if gspr {$language->name}'></b></a></li>"; } echo "<ul class='langswitch'>{$langswitch}</ul>"; Edited May 23, 2018 by flydev missing <ul> tag Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Hi and thank you very much for taking your time to help me. I haven´t been able to reply due to "you have reach the maximun amount of post for today".. Im a very beginner at PHP so thanks for being patient. I have attached the language settings so you can understand better. This is the code that i have at the moment <select onchange='window.location=$(this).val();'> <?php foreach ($languages as $language) { $selected = ''; // if this page isn't viewable (active) for the language, skip it if ( !$page->viewable( $language ) ) continue; // if language is current user's language, make it selected if ( $user->language->id == $language->id )$selected = " selected=selected"; // determine the "local" URL for this language $url = $page->localUrl( $language ); // output the option tag echo "<option$selected value='$url'> $language->language_icon $language->title </option>"; } ?> </select> I tried to implement your code but with no luck. Please help.. :) Link to comment Share on other sites More sharing options...
flydev Posted May 23, 2018 Share Posted May 23, 2018 Sorry for the short answer. I think you are close, try to write $language->language_icon->first()->url or $language->language_icon->url [...] // output the option tag echo "<option$selected value='$url'> {$language->language_icon->first()->url} $language->title </option>"; [...] Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Thanks for the fast reply, this maybe my last post/reply that i can do for today ? anyways. $language->language_icon->first()->url this made the drop down blank $language->language_icon->url this outputted the attached file below. You mentioned something about file/path? Don´t know how or where i should change that. /thanks Link to comment Share on other sites More sharing options...
flydev Posted May 23, 2018 Share Posted May 23, 2018 I didn't saw that the HTML markup is missing. You need it in order to render the image. Try again with : [...] // output the option tag echo "<option$selected value='$url'> <img src='{$language->language_icon->url}' alt='img description'> $language->title </option>"; [...] Link to comment Share on other sites More sharing options...
Gary Austin Posted May 23, 2018 Share Posted May 23, 2018 I don't believe you can have image tags inside an <option> tag. I think you will need to use a replacement jquery plugin like select2, or create your own select using li's. Google "image in option select" and you will find suggestions on how to do this. 1 Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Tried with that code and now the file name isnt displaying though. hmm im i doing something wrong with something else? Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Gary Austin But " flydev did show a working example before? Im i doing something wrong here?. Or can i do this by manually code the path to the images? Sorry but im a total beginner at PHP and processwire. /Thanks Link to comment Share on other sites More sharing options...
flydev Posted May 23, 2018 Share Posted May 23, 2018 Check with the developer tools of your browser, the image should be there. @Gary Austin 's comment is right. Try with this last example, but now its more like a HTML/CSS issue : [...] // output the option tag echo "<option$selected value='$url' style='background-image:url({$language->language_icon->url});'> $language->title </option>"; [...] Link to comment Share on other sites More sharing options...
Gary Austin Posted May 23, 2018 Share Posted May 23, 2018 2 minutes ago, Flashmaster82 said: Gary Austin But " flydev did show a working example before? Im i doing something wrong here?. Or can i do this by manually code the path to the images? Sorry but im a total beginner at PHP and processwire. /Thanks Yes but in his example he was using <li>'s not <select><option> 1 Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 [...] // output the option tag echo "<option$selected value='$url' style='background-image:url({$language->language_icon->url});'> $language->title </option>"; [...] That code made it blank.. Link to comment Share on other sites More sharing options...
Gary Austin Posted May 23, 2018 Share Posted May 23, 2018 I don't believe background images for <option> work across all browsers, but it has been awhile since I messed with it. This is not PHP or Processwire, but basic HTML. You'll need to build your own select (like flydev's first example using <li>'s) or use a jquery or other type of javascript plugin. 1 Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Ok i will try to find something else that works like you sad with some js plugin. Thanks for explaining and helping though. But from one to the other, i have a totally different question that bothers me right now. can you please help. I have 1 template file that will be base for 6 different pages but the same layout. I dont know how to begin the php file to display each pages with its content. This is how i use to start my files/sections with, but then its only for one page and the same content. <?php $page = $pages->get("/start/section1/");?> <h2 class="h6"><?=$page->phone;?></h2> I´d tried with some other code can´t remember but it displayed all the pages at the same page below each other. I know this maybe is some basic stuff but im lost. Please help... Link to comment Share on other sites More sharing options...
Gary Austin Posted May 23, 2018 Share Posted May 23, 2018 Not sure I fully understand what your asking. If it is basic template/pages then the template is passed the $page variable with all the fields and you just use it like you did in the 2nd line $page->phone. You don't load the page like you are showing in the first line as that will always get what ever /start/section1 is. Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Ok i will be more specific. This is my structure of the tempate file. <body class="pagetransition"> <?php require('assets/misc/nav/nav.php'); require('assets/servicearea/subheader/subheader.php'); require('assets/servicearea/section1/section1.php'); require('assets/start/section5/section5.php'); require('assets/misc/footer/footer.php'); ?> </body> as you can see i have 2 files that handles different content. The template name in PW is "servicearea". Because i have other sections/files required and those i have other template names attached to. Like for nav.php i have in the beginning "<?php foreach($pages->find('template=nav') as $page1):?>" etc. Hope that was more info for you /thanks again for the help. Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 <div class="container"> <div class="row"> <?php $page = $pages->get("/misc/footer/");?> <?php foreach($page->navigation as $page ): ?> <div class="col-12 col-sm-6 col-md-3 col-lg-2 col-xl-2"> <ul> <div class="bold purple bmar2 h5"> <?=$page->heading;?> </div> <?php foreach($page->navlinks as $item) { echo "<li class='footer_links_selected'><a href='$item->url' class='black footer_links '>$item->title</a></li>"; } ?> </ul> </div> <?php endforeach;?> <?php endforeach;?> <?php $page = $pages->get("/misc/footer/");?> <div class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-4 text-right"> <div class="footer_phone"> <?=$page->phone;?> </div> <div class="footer_email"> <?=$page->email;?> </div> <?php?> </div> </div> </div> For example this is the end of nav.php. misc/footer is just a dropdown copied from the footer if you wonder.. But this is why servicearea.php doesent work like it should. Because i have to specify at servicearea.php that the content should be there from one of the 6 pages in pw. Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 <?php $page = $pages->get("template=servicearea"); ?> I´d tried with this code but then it only displays like the first page of the 6 on all different URLs Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 <?php foreach($pages->find('template=nav') as $page):?> <nav class="navbar fixed-top"> <a href="<?php echo $pages->get('/')->url;?>"><img src="<?=$config->urls->templates;?>img/logo_black_purple.svg" alt="logo" title="logo" class="navbar_brand"></a> <div class="navbar_menu_wrapper"> <?php foreach($page->navlinks as $item) { echo "<a href='$item->url' class='black navbar_links'>$item->title</a>"; } ?> <div class="navbar_vertical_line"></div> <div class="navbar_language_wrapper"> <select onchange='window.location=$(this).val();'> <?php foreach ($languages as $language) { $selected = ''; // if this page isn't viewable (active) for the language, skip it if ( !$page->viewable( $language ) ) continue; // if language is current user's language, make it selected if ( $user->language->id == $language->id )$selected = " selected=selected"; // determine the "local" URL for this language $url = $page->localUrl( $language ); // output the option tag echo "<option$selected value='$url'> {$language->language_icon} $language->title </option>"; } ?> </select> </div> <div class="navbar_vertical_line"></div> <div class="navbar_hamburgermenu_wrapper"> <div class="navbar_hamburgermenutext uppercase"> <?=$fields->get('menutext')->$label;?> </div> <div class="ham-bg"> <div class="button_container" id="toggle"> <span class="top"></span> <span class="middle"></span> <span class="bottom"></span> </div> <div class="overlay" id="overlay"> <div class="overlay-menu container-fluid"> <div class="navrow"> <div class="navmenu-col col-12"> <div class="container"> <div class="row"> <?php $page = $pages->get("/misc/footer/");?> <?php foreach($page->navigation as $page ): ?> <div class="col-12 col-sm-6 col-md-3 col-lg-2 col-xl-2"> <ul> <div class="bold purple bmar2 h5"> <?=$page->heading;?> </div> <?php foreach($page->navlinks as $item) { echo "<li class='footer_links_selected'><a href='$item->url' class='black footer_links '>$item->title</a></li>"; } ?> </ul> </div> <?php endforeach;?> <?php $page = $pages->get("/misc/footer/");?> <div class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-4 text-right"> <div class="footer_phone"> <?=$page->phone;?> </div> <div class="footer_email"> <?=$page->email;?> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </nav> <?php endforeach;?> <link rel="stylesheet" href="<?=$config->urls->templates;?>css/megamenu.css"> <script src="<?=$config->urls->templates;?>js/megamenu.js"></script> This is nav.php that is on top of the servicearea.php in the structure. This is servicearea.php that is the template file in pw <div class="subpage_section1"> <div class="container"> <div class="row"> <?php require('assets/servicearea/sidemenu/sidemenu.php'); ?> <?php $page = $pages->get("template=servicearea"); ?> <div class="col-12 col-sm-12 col-md-9 col-lg-8 col-xl-8"> <div class="introduction bmar2"><?=$page->introduction;?></div> <?=$page->textarea;?> </div> </div> </div> </div> Link to comment Share on other sites More sharing options...
Gary Austin Posted May 23, 2018 Share Posted May 23, 2018 (edited) I'm just a beginner at ProcessWire, so not much help as I can't figure out your code/structure at a quick glance as it is structured so different than the way I'm using PW. On your first issue with the flag images, you really need to use the code with ul/li that flydev showed you. Going with a javascript select is really overkill for what you are trying to do as you do not really need a select at all. Just a ul with li's containing anchor tags and <img src="image url"> tag inserted before the $language-title piece. Then the the css to make it look like a select (which may work with the classes he provided, but I don't know that piece of code and where the css is coming from). Edited May 23, 2018 by Gary Austin Link to comment Share on other sites More sharing options...
Flashmaster82 Posted May 23, 2018 Author Share Posted May 23, 2018 Ok thanks i will try to have a look at that and try to figure out how to make it work. Regarding the structure and the servicearea file. This is the servicearea.php code <!doctype html> <html lang="en"> <head> <?php require("assets/misc/meta/meta.php"); require("assets/misc/scripts/scripts.php"); ?> <link rel="stylesheet" href="<?php echo AIOM::CSS(array('css/hover.css', 'css/animate.min.css')); ?>"> <link rel="stylesheet" href="<?=$config->urls->templates;?>css/nav_start.css"> <script src="<?php echo AIOM::JS(array('js/scrolla.js', 'js/scrollme.js', 'js/smoothscroll.js')); ?>"></script> </head> <body class="pagetransition"> <?php require('assets/misc/nav/nav.php'); require('assets/servicearea/subheader/subheader.php'); require('assets/servicearea/section1/section1.php'); require('assets/start/section5/section5.php'); require('assets/misc/footer/footer.php'); ?> </body> </html> The required files is sections of the page. require('assets/misc/nav/nav.php'); require('assets/start/section5/section5.php'); require('assets/misc/footer/footer.php'); these files are on every page /subpage on the whole site. require('assets/servicearea/subheader/subheader.php'); require('assets/servicearea/section1/section1.php'); And this is where i want to change the content depending on what page/url im on. example ( require('assets/servicearea/section1/section1.php');) <div class="subpage_section1"> <div class="container"> <div class="row"> <?php require('assets/servicearea/sidemenu/sidemenu.php'); ?> <?php $page = $pages->get('template=servicearea');?> <div class="col-12 col-sm-12 col-md-9 col-lg-8 col-xl-8"> <div class="introduction bmar2"><?=$page3->introduction;?></div> <?=$page3->textarea;?> </div> </div> </div> </div> I dont know if you also working with include/required files but in the browser all required files are then displayed next to each other if you look at the page code. As you can se <?php $page = $pages->get('template=servicearea');?> will output only the first of my 6 different pages in PW (different urls) different content same template (servicearea.php). I want each pages in pw display the correct content for the page etc. Hope the was more helpful. Thanks for the help so far. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now