2012-10-18 54 views
0

這應該是相當直接的問題,但無法找到如何去做。在前端,我有一個表單,其中包含一些編輯框或input-text字段。在其中一個用戶將寫/粘貼博客網址。當用戶退出箱子時,我想:退出Magento填充編輯框

  1. 抓住此URL並從該博客解析/搜索/獲取與OpenGraph protocol相關的標記(如果存在)。如果沒有這種標籤,則會使用通常的title和相關標籤。
  2. 然後用變量的值來填補其他編輯領域目前的形式,標題,註釋,說明,圖像等

如何能夠將這些動作可以完成,AJAX可能?加上jQuery?或者其他解決方案? 現在我已經搜查,這裏有一些鏈接,我想可能是有用的:

我有充分的工作模塊,幾種不同的模型,佈局,控制器,後端管理,幾個前端功能等等我甚至不知道從哪裏開始,哪些文件需要修改,以及要在表單上添加什麼內容。

EDIT

管理來完成第二點,從使用XMLHttpRequest Ajax請求填使用應答其他輸入文件。這裏是不同的文件,以防萬一有人有不同的解決方案或一些建議。不會顯示所有的代碼,因爲它會太長。

PHTML文件:

<div id="blog_link_block"> 
    <input class="input-text required-entry" onchange="showHint(this.value)" 
      name="blog_link" id="blog_link_field" type="text" style="width: 210px;" 
      value="" /> 
</div> 
<div> 
    <label for="title_field"><?php echo $this->__('Title'); ?> 
     <span class="required">*</span> 
    </label><br /> 
    <input class="input-text required-entry" name="title" id="title_field" type="text" 
      style="width: 450px;" value="" /> 
</div> 

<script type="text/javascript"> 
    function showHint(str) 
    { 
     <?php $block = Mage::getBlockSingleton('blogtest/product_view'); 
     $temp = $block->getUrl('blogtest/blogtagsajax/index');?> 

     if (str.length==0) 
     { 
      document.getElementById("title_field").innerHTML = ""; 
      return; 
     } 
     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp = new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      document.getElementById("title_field").value = xmlhttp.responseText; 
     } 
     } 
    xmlhttp.open("GET","<?php echo $temp ?>?q="+str,true); 
    xmlhttp.send(); 
} 
</script> 

佈局文件:

<?xml version="1.0" encoding="UTF-8"?> 
<layout version="0.1.0"> 
    <blogtest_blogtagsajax_index> 
     <reference name="root"> 
      <remove name="root"/> 
     </reference> 
     <block type="blogtest/product_ajax" name="product.ajax" output="toHtml" /> 
    </blogtest_blogtagsajax_index> 
</layout> 

控制器:

<?php 
class Dts_Blogtest_BlogtagsajaxController extends Mage_Core_Controller_Front_Action { 

    public function indexAction() { 
     $this->loadLayout(); 
     $this->renderLayout(); 
    } 
} 

PHP文件來處理該請求:

<?php 
class Dts_Blogtest_Block_Product_Ajax extends Mage_Core_Block_Template { 

    public function __construct(){ 
     echo self::myFunc(); 
    } 

    public function myFunc() { 
     $a[]="Anna"; 
     $a[]="Brittany"; 
     $a[]="Cinderella"; 
     $a[]="Diana"; 

     //get the q parameter from URL 
     $q=$_GET["q"]; 

     //lookup all hints from array if length of q>0 
     if (strlen($q) > 0) 
     { 
      $hint=""; 
      for($i=0; $i<count($a); $i++){ 
       if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q)))){ 
        if ($hint==""){ 
         $hint=$a[$i]; 
        } 
        else{ 
         $hint=$hint." , ".$a[$i]; 
        } 
       } 
      } 
     } 

     if ($hint == ""){ 
      $response="no suggestion"; 
     } 
     else{ 
      $response=$hint; 
     } 

     //output the response 
     return $response; 
    } 
} 

回答

0

要回答的第一個問題使用OpenGraphNode圖書館嘗試過,但卡住了with some errors

然後我發現這個question/answer right here on SO和所有問題都沒有了。在接受的答案上提出的功能完美地與og:標籤一起工作。這裏是我的修改版本:

function file_get_contents_curl($url) 
{ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     return $data; 
} 

public function myFunc() { 
    // get the q parameter from URL 
    $q = $_GET["q"]; 

    $html = self::file_get_contents_curl($q); 

    //parsing begins here: 
    $doc = new DOMDocument(); 
    @$doc->loadHTML($html); 
    $nodes = $doc->getElementsByTagName('title'); 
    $title = $nodes->item(0)->nodeValue; 
    $metas = $doc->getElementsByTagName('meta'); 

    for ($i = 0; $i < $metas->length; $i++){ 
     $meta = $metas->item($i); 
     if($meta->getAttribute('name') == 'og:title') 
      $title = $meta->getAttribute('content'); 
     if($meta->getAttribute('name') == 'og:description') 
      $description = $meta->getAttribute('content'); 
     if($meta->getAttribute('name') == 'keywords') 
      $keywords = $meta->getAttribute('content'); 
    } 

    $title = trim($title); 
    if ($title == ""){ 
     $response = "no title"; 
    } 
    else{ 
     $response = $title; 
    } 
    //output the response 
    return $response; 
}