1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Замена iframe

Тема в разделе "Web Coding", создана пользователем SocMaster, 25 окт 2013.

Модераторы: latteo
  1. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Есть страница, где с другого сайта выводится информация, информация идет в цикле, каждый раз передается значения через фрейм и инклудится (текстовая строка и все)
    Когда на странице 100 таких фреймов загрузка у меня подвисает :eek::D
    Есть замена? Можно php можно html
    Попробовал object но все равно подлагивает
    Вот такая строка в цикле
    <object type="text/html" data="http://api.microsofttranslator.com/...ars(str_replace(array(']]&gt;','&lt;/item&gt;'), array(']]>','</item>'), $value)).'" >
    </object>:D
    как лучше выводить инфу?
     
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    это клиент умирает пробуя загрузить контент, скорее всего. может на сервере лучше сделать, и возможно у апи есть возможность принимать пачку для перевода за один-два вызова, а не 100-ни одинарных?

    тоесть, получить массив
    $items = array() с переведёнными строками, а дальше итерировать и выводить то, что нужно

    ну вот например
    http://msdn.microsoft.com/en-us/library/ff512418.aspx
    http://msdn.microsoft.com/en-us/library/ff512434.aspx

     
    Последнее редактирование: 25 окт 2013
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Есть вот такое вроде
    PHP:
    <?php

    class AccessTokenAuthentication {
        
    /*
        * Get the access token.
        *
        * @[USER=314738]param[/USER] string $grantType    Grant type.
        * @[USER=314738]param[/USER] string $scopeUrl    Application Scope URL.
        * @[USER=314738]param[/USER] string $clientID    Application client ID.
        * @[USER=314738]param[/USER] string $clientSecret Application client ID.
        * @[USER=314738]param[/USER] string $authUrl      Oauth Url.
        *
        * @[USER=273296]Return[/USER] string.
        */
        
    function getTokens($grantType$scopeUrl$clientID$clientSecret$authUrl){
            try {
                
    //Initialize the Curl Session.
                
    $ch curl_init();
                
    //Create the request Array.
                
    $paramArr = array (
                    
    'grant_type'    => $grantType,
                    
    'scope'        => $scopeUrl,
                    
    'client_id'    => $clientID,
                    
    'client_secret' => $clientSecret
                
    );
                
    //Create an Http Query.//
                
    $paramArr http_build_query($paramArr);
                
    //Set the Curl URL.
                
    curl_setopt($chCURLOPT_URL$authUrl);
                
    //Set HTTP POST Request.
                
    curl_setopt($chCURLOPT_POSTTRUE);
                
    //Set data to POST in HTTP "POST" Operation.
                
    curl_setopt($chCURLOPT_POSTFIELDS$paramArr);
                
    //CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
                
    curl_setopt ($chCURLOPT_RETURNTRANSFERTRUE);
                
    //CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
                
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
                
    //Execute the  cURL session.
                
    $strResponse curl_exec($ch);
                
    //Get the Error Code returned by Curl.
                
    $curlErrno curl_errno($ch);
                if(
    $curlErrno){
                    
    $curlError curl_error($ch);
                    throw new 
    Exception($curlError);
                }
                
    //Close the Curl Session.
                
    curl_close($ch);
                
    //Decode the returned JSON string.
                
    $objResponse json_decode($strResponse);
                if (
    $objResponse->error){
                    throw new 
    Exception($objResponse->error_description);
                }
                return 
    $objResponse->access_token;
            } catch (
    Exception $e) {
                echo 
    "Exception-".$e->getMessage();
            }
        }
    }


    Class 
    HTTPTranslator {
        
    /*
        * Create and execute the HTTP CURL request.
        *
        * @[USER=314738]param[/USER] string $url        HTTP Url.
        * @[USER=314738]param[/USER] string $authHeader Authorization Header string.
        * @[USER=314738]param[/USER] string $postData  Data to post.
        *
        * @[USER=273296]Return[/USER] string.
        *
        */
        
    function curlRequest($url$authHeader$postData=''){
            
    //Initialize the Curl Session.
            
    $ch curl_init();
            
    //Set the Curl url.
            
    curl_setopt ($chCURLOPT_URL$url);
            
    //Set the HTTP HEADER Fields.
            
    curl_setopt ($chCURLOPT_HTTPHEADER, array($authHeader,"Content-Type: text/xml"));
            
    //CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
            
    curl_setopt ($chCURLOPT_RETURNTRANSFERTRUE);
            
    //CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
            
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFalse);
            if(
    $postData) {
                
    //Set HTTP POST Request.
                
    curl_setopt($chCURLOPT_POSTTRUE);
                
    //Set data to POST in HTTP "POST" Operation.
                
    curl_setopt($chCURLOPT_POSTFIELDS$postData);
            }
            
    //Execute the  cURL session.
            
    $curlResponse curl_exec($ch);
            
    //Get the Error Code returned by Curl.
            
    $curlErrno curl_errno($ch);
            if (
    $curlErrno) {
                
    $curlError curl_error($ch);
                throw new 
    Exception($curlError);
            }
            
    //Close a cURL session.
            
    curl_close($ch);
            return 
    $curlResponse;
        }


        
    /*
        * Create Request XML Format.
        *
        * @[USER=314738]param[/USER] string $fromLanguage  Source language Code.
        * @[USER=314738]param[/USER] string $toLanguage    Target language Code.
        * @[USER=314738]param[/USER] string $contentType    Content Type.
        * @[USER=314738]param[/USER] string $inputStrArr    Input String Array.
        *
        * @[USER=273296]Return[/USER] string.
        */
        
    function createReqXML($fromLanguage,$toLanguage,$contentType,$inputStrArr) {
            
    //Create the XML string for passing the values.
            
    $requestXml "<TranslateArrayRequest>".
                
    "<AppId/>".
                
    "<From>$fromLanguage</From>".
                
    "<Options>" .
                
    "<Category xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  
    "<ContentType xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">$contentType</ContentType>" .
                  
    "<ReservedFlags xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  
    "<State xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  
    "<Uri xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  
    "<User xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                
    "</Options>" .
                
    "<Texts>";
            foreach (
    $inputStrArr as $inputStr)
            
    $requestXml .=  "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">$inputStr</string>" ;
            
    $requestXml .= "</Texts>".
                
    "<To>$toLanguage</To>" .
              
    "</TranslateArrayRequest>";
            return 
    $requestXml;
        }
    }

    try {
        
    //Client ID of the application.
        
    $clientID      "clientId";
        
    //Client Secret key of the application.
        
    $clientSecret "clientSecret";
        
    //OAuth Url.
        
    $authUrl      "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
        
    //Application Scope Url
        
    $scopeUrl    "http://api.microsofttranslator.com";
        
    //Application grant type
        
    $grantType    "client_credentials";

        
    //Create the AccessTokenAuthentication object.
        
    $authObj      = new AccessTokenAuthentication();
        
    //Get the Access token.
        
    $accessToken  $authObj->getTokens($grantType$scopeUrl$clientID$clientSecret$authUrl);
        
    //Create the authorization Header string.
        
    $authHeader "Authorization: Bearer "$accessToken;

        
    //Set the params.//
        
    $fromLanguage "en";
        
    $toLanguage  "de";
        
    $inputStrArr  = array("The answer lies in machine translation.""the best machine translation technology cannot always provide translations tailored to a site or users like a human.");
        
    $contentType  'text/plain';
        
    //Create the Translator Object.
        
    $translatorObj = new HTTPTranslator();

        
    //Get the Request XML Format.
        
    $requestXml $translatorObj->createReqXML($fromLanguage,$toLanguage,$contentType,$inputStrArr);

        
    //HTTP TranslateMenthod URL.
        
    $translateUrl "http://api.microsofttranslator.com/v2/Http.svc/TranslateArray";

        
    //Call HTTP Curl Request.
        
    $curlResponse $translatorObj->curlRequest($translateUrl$authHeader$requestXml);

        
    //Interprets a string of XML into an object.
        
    $xmlObj simplexml_load_string($curlResponse);
        
    $i=0;
        echo 
    "<table border=2px>";
        echo 
    "<tr>";
        echo 
    "<td><b>From $fromLanguage</b></td><td><b>To $toLanguage</b></td>";
        echo 
    "</tr>";
        foreach(
    $xmlObj->TranslateArrayResponse as $translatedArrObj){
            echo 
    "<tr><td>".$inputStrArr[$i]."</td><td>"$translatedArrObj->TranslatedText."</td></tr>";
            
    $i++;
        }
        echo 
    "</table>";
    } catch (
    Exception $e) {
        echo 
    "Exception: " $e->getMessage() . PHP_EOL;
    }
                    
    Но что то он огромный очень...
    Подскажите как использовать в цикле это?
    Я выбрал фрейме потому что проще и понятнее :rolleyes: а тут оказалось что данных много:nezn:
     
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    ну вот же есть пример
    Код:
    //Client ID of the application.
        $clientID      = "clientId";
        //Client Secret key of the application.
        $clientSecret = "clientSecret";
        //OAuth Url.
        $authUrl      = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
        //Application Scope Url
        $scopeUrl    = "http://api.microsofttranslator.com";
        //Application grant type
        $grantType    = "client_credentials";
    
        //Create the AccessTokenAuthentication object.
        $authObj      = new AccessTokenAuthentication();
        //Get the Access token.
        $accessToken  = $authObj->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl);
        //Create the authorization Header string.
        $authHeader = "Authorization: Bearer ". $accessToken;
    
        //Set the params.//
        $fromLanguage = "en";
        $toLanguage  = "de";
        $inputStrArr  = array("The answer lies in machine translation.", "the best machine translation technology cannot always provide translations tailored to a site or users like a human.");
        $contentType  = 'text/plain';
        //Create the Translator Object.
        $translatorObj = new HTTPTranslator();
    
        //Get the Request XML Format.
        $requestXml = $translatorObj->createReqXML($fromLanguage,$toLanguage,$contentType,$inputStrArr);
    
        //HTTP TranslateMenthod URL.
        $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/TranslateArray";
    
        //Call HTTP Curl Request.
        $curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader, $requestXml);
    
        //Interprets a string of XML into an object.
        $xmlObj = simplexml_load_string($curlResponse);
        $i=0;
        echo "<table border=2px>";
        echo "<tr>";
        echo "<td><b>From $fromLanguage</b></td><td><b>To $toLanguage</b></td>";
        echo "</tr>";
        foreach($xmlObj->TranslateArrayResponse as $translatedArrObj){
            echo "<tr><td>".$inputStrArr[$i]."</td><td>". $translatedArrObj->TranslatedText."</td></tr>";
            $i++;
        }
        echo "</table>";
    Код:
     $inputStrArr  = array("The answer lies in machine translation.", "the best machine translation technology cannot always provide translations tailored to a site or users like a human.");
    Код:
    foreach($xmlObj->TranslateArrayResponse as $translatedArrObj){ echo "<tr><td>".$inputStrArr[$i]."</td><td>". $translatedArrObj->TranslatedText."</td></tr>"; $i++; }
     
  5. xzenon

    xzenon Создатель

    Регистр.:
    11 ноя 2011
    Сообщения:
    14
    Симпатии:
    1
    Мне кажется, что наличие 100 фреймов на странице - плохое решение с точки зрения архитектуры. Возможно стоит изменить сам подход к отображению этих данных?
     
    mff4 нравится это.
  6. Aserus

    Aserus Постоялец

    Регистр.:
    16 ноя 2013
    Сообщения:
    78
    Симпатии:
    4
    Не лучше ли делать загрузку на ajax, и при получении контента парсить его, брать именно те поля которые нужны и заполнять в div
     
  7. mrakobes0001

    mrakobes0001 Создатель

    Регистр.:
    6 фев 2013
    Сообщения:
    33
    Симпатии:
    17
    если к-во полезной информации уменьшить нельзя
    то собственно не важно на чем вызывать егое, ифреймами инклюдить, или курлом рендерить
    как вариант
    можно оформить аккордеончик
    и нужная инфа - будет подгружаться только если роскроют соответвующий пункт
     
  8. Пендель

    Пендель Писатель

    Регистр.:
    16 апр 2014
    Сообщения:
    9
    Симпатии:
    3
    на javascript сделать подгрузку фреймов по мере прокрутки страницы. А которые ушли из поля зрения, можно и выгрузить
     
  9. karakym

    karakym Создатель

    Регистр.:
    13 июл 2012
    Сообщения:
    34
    Симпатии:
    5
    Загружать и разгружать контент? Сталкивался однажды, не лучшая идея.
     
  10. siriusfrk

    siriusfrk Создатель

    Регистр.:
    6 май 2014
    Сообщения:
    37
    Симпатии:
    17
    Лучшим будет, на мой взгляд, грузить отдельним пхп скриптом, обрабатывать и выдавать уже json для последующего отображения через всплывающие окна и прочее.