it-swarm-tr.com

Ne kullanılır, simplexml_load_file veya JForm :: getInstance veya?

Ben fieldDetails xml alan öznitelik değeri almanız gerekir. Bu alan ve stilleri özniteliğine ihtiyacım var

<field name="get_styles" type="yjsglist" default="blue|007ebd" styles="blue==007ebd|red==121212">
    <option value="blue|007ebd">Blue</option>
    <option value="red|ff0000">Mesh</option>
</field>

şu anda bunu yapıyorum

$get_xml        = simplexml_load_file('templateDetails.xml');
$get_styles     = $get_xml->config->fields->fieldset[1];
$load_styles    ='';
foreach ($get_styles as $attribute){
    if($attribute['name'] == 'get_styles'){
        $load_styles        = get_object_vars($attribute);
        break;
    }
}
$mystyles               = explode('|',$attribute['styles']);

bu JForm :: getInstance yolu olurdu

$get_xml            = JForm::getInstance('template-settings','templateDetails.xml');
$getStyles          = $get_xml->getFieldAttribute('get_styles','styles' ,'default', 'params');
$mystyles           = explode('|',$getStyles);

Sadece JForm :: getInstance koduna bakarak daha hızlı görünüyor ama nedense performans daha yavaş gibi görünüyor ve ben öznitelik adı ve Jform :: getInstance sonuna kadar döngü en kısa sürede döngü olabilir düşünüyorum düşünüyorum .

Ben db veya params-> olsun çünkü ben db veya başka bir yerde onu alamıyorum unutmayın Ben atanan değeri almak ve tüm mevcut stilleri ile düğüm özniteliği gerekir.

Ne düşünüyorsun? Yukarıda belirtilenlerden özelliği almanın daha iyi/daha hızlı bir yolu var mı?

Herhangi bir hep takdir edilir. Teşekkür ederim!

Çözüm: David'in harika bir örneği beni burada önerildiği gibi kod düzeltmesini izlemeye götürdü

http://www.dimuthu.org/blog/2008/09/30/xpath-in-simplexml/

$get_xml = simplexml_load_file('templateDetails.xml');
$styles = $get_xml->xpath('//@styles');
$style = (string)$styles[0];
$mystyles = explode('|',$style);

umarım bu sana yardımcı olur!

6
Dan

JForm gerçekten daha standart PHP kodunuzla aynı şeyleri yapar. Eğer libraries/joomla/form/form.php 'da JForm tanımına atlarsanız ve işlevlerinde, simplexml_load_file() ve findFields() işlevinde sorgunuzla eşleşen bir döngü görürsünüz.

Ve muhtemelen ilk koddan bir performans artışı alacağınız doğrudur. Bunun iki nedeni var. En büyük olasılıkla, ihtiyacınız olan değeri bulduğunuzda kırmanızdır. Diğeri ise, JForm, alanların yükleneceği xml'deki yolları kontrol etmek için bazı ekstra işlemler ekleyecek ve gerçekten ihtiyacınız olmayacak, ancak işlemek için ekstra iş ekleyecek.


Döngüyü tamamen atlamak ve xpath'i kullanmak istediğiniz tam değeri elde etmek için sadece bir performans artışı düşünebilirim. Ben xpath en iyisi değilim, bu yüzden denemek istiyorsanız bunun hakkında biraz daha fazla okumak isteyebilirsiniz: http://msdn.Microsoft.com/en-us/library/ms256086 (v = vs.110) .aspx

Bunu form verilerinizle biraz test ettim ve bu bir alternatif olmalı:

$get_xml = simplexml_load_file('templateDetails.xml');
$styles = $get_xml->xpath("//field[@name='get_styles']/@styles");
$style = (string)$styles[0];
$mystyles = explode('|',$style);

Xpath tek örnek kapmak ve bir dize olmaya zorlamak bir dizi döndürür. Sonra senin gibi patlıyorum.

6
David Fritsch

simplexml_load_file kullanın
JForm - form oluşturma sınıfı ve temel olarak sizin ve simplexml arasındaki katman, bu yüzden sadece simplexml_load_file

ancak kodunuz daha basit olabilir, bir alan bulmak için SimpleXMLElement :: xpath ve tüm özellikleri almak için SimpleXMLElement :: attributes adresine bakın veya yalnızca (string) $field_that_you_found['style']

3
Fedik