Website zoek formulier van externe site

Status
Niet open voor verdere reacties.

damnsharp

Terugkerende gebruiker
Lid geworden
6 jan 2012
Berichten
1.394
Hoi,
Ik wil een zoekformulier op een site zetten maar die moet een externe zoek link uitvoeren.
Klinkt misschien wat ingewikkeld hoe ik het zo opschrijf dus ik geef een voorbeeld.

In een zoekformulier moet deze link aangeroepen worden met het zoekwoord (in dit voorbeeld tonercartridge):
shop.websitenaam.nl/search/?easy=true&text=tonercartridge

En dan mogen de resultaten in die andere site getoond worden.

Mijn vraag is, heeft iemand php code daarvoor of een linkje naar een site met code?
Volgens mij is het niet zo ingewikkeld maar (php) programmeren is niet mijn sterkste kant.

Thanks! :thumb:
 
Laatst bewerkt:
Eigenlijk kan je toch al je formulier versturen naar de URL shop.websitenaam.nl/search/... ;)

Je hoeft er zelfs niet voor te programmeren ;)

Het is alleen te hopen dat die site geen CSRF-token gebruikt.
 
Laatst bewerkt:
Niet getest maar is dit een opzetje (wat je verder zelf kan uitwerken)
Code:
<form method="post" action="mijnpagina.php">
  <input type="text" name="query" value="" />
  <input type="submit" value="Zoeken" />
</form>

** mijnpagina.php **

$extFile = '';
if (isset($_POST['query'])) {
    $url = 'https://shop.example.nl/search/?easy=true&text=' . urlencode($_POST['query']);
    $extFile = file_get_contents($url);
}
// <= hier tekst in extFile wat uitkleden
echo $extFile;
 
Bedankt @bron! Ga ik mee aan de slag. Ik kom erop terug.
 
Hoi @bron, ik heb twee pagina's gemaakt met code en zal die hieronder plaatsen. Pagina 1 met zoekformulier gaat goed. Maar krijg direct melding "Pagina kon niet worden gevonden" als ik op zoeken klik.

search-page.php
Code:
<?php
/*
Template Name: search-page
*/
get_header(); ?>

	<div id="wrapper" >

        <!-- BEGIN CONTENT-MAIN -->
        <div id="content-main-full" >
        
            <!-- BEGIN CONTENT -->
            <div id="content" > 

                
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ac neque nibh. Pellentesque elementum aliquet nisi at placerat. Donec sagittis scelerisque nisl, a rhoncus massa viverra ut. Aenean ultrices tellus est, non ornare nibh vulputate accumsan. Phasellus sit amet libero ac nisi lobortis imperdiet. Vivamus accumsan mi id tellus fermentum, ac interdum massa pulvinar. Vestibulum nec ex ante. Proin id dui tempus, elementum nisl nec, consequat turpis.</p>
                <form method="post" action="search-results.php">
                    <input type="text" name="query" value="" />
                    <input type="submit" value="Zoeken" />
                </form>
                
				<?php
				/* Run the loop to output the page.
				 * If you want to overload this in a child theme then include a file
				 * called loop-page.php and that will be used instead.
				 */
				get_template_part( 'loop', 'page' );
				?>
                
                
            </div> <!-- EINDE CONTENT -->
        
        </div> <!-- EINDE CONTENT-MAIN -->

</div> <!-- EINDE WRAPPER -->

</div> <!-- EINDE CONTAINER -->	

<?php get_footer(); ?>

search-results.php
Code:
<?php
/*
*/
get_header(); ?>

	<div id="wrapper" >

            <!-- BEGIN CONTENT -->
            <div id="content" > 

                <?php
                $extFile = '';
                if (isset($_POST['query'])) {
                    $url = 'https://shop.websitenaam.nl/search/?easy=true&text=' . urlencode($_POST['query']);
                    $extFile = file_get_contents($url);
                }
                // <= hier tekst in extFile wat uitkleden
                echo $extFile;
                ?>
                
				<?php
				/* Run the loop to output the page.
				 * If you want to overload this in a child theme then include a file
				 * called loop-page.php and that will be used instead.
				 */
				get_template_part( 'loop', 'page' );
				?>
                
                
            </div> <!-- EINDE CONTENT -->
        
    </div> <!-- EINDE WRAPPER -->

</div> <!-- EINDE CONTAINER -->	

<?php get_footer(); ?>
 
Hoogstwaarschijnlijk heb je die niet geuploadt.
 
Laatst bewerkt:
@php4u dat wel, misschien moet ik volledige unc pad erin zetten, ga ik proberen
 
Test dit even in een los bestandje in combinatie met "example.nl", handig zo'n website ;)
Code:
// strip text leftside or rightside
function strip_text ($text, $find='', $rightside=false) {
    if ($text == '' || $find == '') return $text;
    $pos = stripos($text, $find);
    if ($pos === false) return $text;
    if ($rightside) return substr($text, 0, $pos - strlen($text) + strlen($find));
    else return substr($text, $pos);
}
$extFile = file_get_contents('https://www.example.nl');
$extFile = strip_text ($extFile, "<body");
$extFile = strip_text ($extFile, "</body>", true);
echo $extFile;

Als het mee zit haal je de pagina "example.nl" binnen en heb je met de functie alleen de body van die pagina.

Mogelijk blokkeert de provider wat dingen, in dat geval zal je op zoek moeten naar een CURL script om de pagina te laden.
 
dat werkt @bron, ik krijg dan deze info:"

SIDN Logo
Example domain name
This domain name has been registered by SIDN.
You may use it as an example of a domain name. Prior permission is not required.
More about SIDN.
 
Klopt toch :)
Dan lijkt de rest ook een eitje!
 
Laatst bewerkt:
Stapje voor stapje.
Code:
<?php get_header(); ?>
    <div id="wrapper" >
        <div id="content" > 
            
            <?php
            // hier de code van #8 testen. Werkt dat?
            ?>

            <?php  //  get_template_part('loop', 'page'); ?>
            
        </div> <!-- einde content -->
    </div> <!-- einde wrapper -->
</div> <!-- einde container -->    
<?php get_footer(); ?>
 
@bron, dat lukt ook, krijg ik netjes zoekformulier maar als ik dan op zoeken klik komt melding deze pagina kon niet worden gevonden.
Voor je beeldvorming, de pagina "zoek-pagina" gebruikt het search-page.php template waar de code van het zoekformulier in staat.

De URL die ik bij de foutmelding zie is websitenaam/zoek-pagina/search-results.php
Wellicht komt dat omdat ik geen url heb geplaatst in search-page.php die search-results.php moet aanroepen?

Ik heb de search-page.php en search-results.php pagina beide in het (child)thema (WP site) op dezelfde plek gezet.
 
Krijg je een pagina met resultaten als je jouw linkje op de adresregel in de browser invult?
Code:
//shop.example.nl/search/?easy=true&text=tonercartridge

Zo ja, krijg je dit ook als je jouw linkje in de test van #8 invult.

Zo ja, wat gebeurt er als je #11 (in combinatie met #8) en jouw linkje gebruikt?

aanv. <form action="____.php"> moet een bestaande pagina in WP zijn. Deze pagina doet de file_get_contents() en maakt van de ontvangen resultaten-pagina een nette output (concept #8).
 
Laatst bewerkt:
Yes het is gelukt! De laatste zin van je @bron deed het 'm. Ik heb een subpagina onder de zoekpagina gemaakt die resultaten heet. En die pagina gebruikt het search-results.php template.

Ik krijg nu de resultaten maar daarboven zie ik van de website onder elkaar zonder opmaak de header, sidebar, dan de content (de zoekresultaten) en als laatste de footer.
Nu nog ervoor zorgen dat de header, sidebar en footer niet getoond worden.
 
Nou met CSS kom ik een heel eind; heb de pagina al behoorlijk naar mijn zin kunnen opmaken.

Nu staat er bij een product een "bekijk" knop. Deze wijst naar /productnaam en als je daarop klikt wordt dat in de huidige site geopend en die vind het product logischer wijze niet.
Is het met bijv jquery mogelijk de link aan te passen?
Dus dat bij a href dit wordt toegevoegd shop.websitenaam.nl ?

Nu is het:
<a href="/productnaam" class="btn btn-default" title="Details"> <span> Bekijk</span> </a>

En moet zoiets worden als:
<a target="_blank" href="shop.websitenaam.nl/productnaam" class="btn btn-default" title="Details"> <span> Bekijk</span> </a>
 
Eigenlijk zou je dit in de php moeten doen.
In de browser met Javascript kan het op deze manier.
Code:
<div class="[B]results[/B]">
  <a href="/product1" class="btn btn-default" title="Details 1"> <span> Bekijk</span> </a>
  <a href="/product2" class="btn btn-default" title="Details 2"> <span> Bekijk</span> </a>
  <a href="/product3" class="btn btn-default" title="Details 3"> <span> Bekijk</span> </a>
</div>

<script>
var urlPrefix = 'https://shop.example.nl';
var i, prodBtns = document.querySelectorAll(".[B]results[/B] .btn");
for (i = 0; i < prodBtns.length; i++) {
  prodBtns[i].setAttribute("href", urlPrefix + prodBtns[i].getAttribute("href"));
  prodBtns[i].setAttribute("target", "_blank");
}
</script>
 
Laatst bewerkt:
Hoi @bron, wat later reactie maar kon nu pas tijd in dit probleem steken.
Ik krijg het aanpassen van de link nog niet voor mekaar.
Met onderstaande code wordt het dit:
2019-11-25 13_19_40-Developer Tools - Resultaten – WordPress 5 test website - http___localhost_w.jpg

en als ik de .btn class verander voor bijvoorbeeld .thumb dan komt de URL wel tevoorschijn maar bij die klasse en wordt het dit:
2019-11-25 13_24_57-Developer Tools - Resultaten – WordPress 5 test website - http___localhost_w.jpg

Kortom het lukt me nog niet om bij de zoekresultaten voor de weblink van een resultaat de juiste domeinnaam te plaatsen.
Het probleem is denk ik dat bij de URL (a href) geen klasse is gedefinieerd.


PHP:
<!-- BEGIN CONTENT -->
<div id="content" > 
    <h1>zoekresultaten</h1>
    <div class="results">
        <?php
        $extFile = '';
        if (isset($_POST['query'])) {
            $url = 'https://shop.naam.nl/search/?easy=true&text=' . urlencode($_POST['query']);
            $extFile = file_get_contents($url);
        }
        // <= hier tekst in extFile wat uitkleden
        echo $extFile;
        ?>
    </div>

    <script>
        var urlPrefix = 'https://shop.example.nl';
        var i, prodBtns = document.querySelectorAll(".results .btn");
        for (i = 0; i < prodBtns.length; i++) {
          prodBtns[i].setAttribute("href", urlPrefix + prodBtns[i].getAttribute("href"));
          prodBtns[i].setAttribute("target", "_blank");
        }
    </script>

    <?php
    get_template_part( 'loop', 'page' );
    ?>
</div> <!-- EINDE CONTENT -->
 
var i, prodBtns = document.querySelectorAll(".results .btn");
Op jouw screenshots zie ik geen class="results" en geen class="btn" ?

Met de classes in jouw screenshots... werkt het misschien zo
Code:
var i, prodBtns = document.querySelectorAll(".wrapper-hover .thumb a");
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan