(Ben gerçekten sadece şeyi kavramak başlıyorum) PHP bir uzman değilim ve Tumblr adlı yazı başlıkları ayıklamak için customized bir komut dosyası için biraz yardıma ihtiyacım var (ve ben ısrar, bir {var [(1)]}, I) benim için yazılmış tüm komut dosyası için sormuyorum.
Bilmiyor olanlar için: Tumblr yazının öncesi format tipini (alıntı, fotoğraf, vs) sunan özelliği ile bir mikroblog platformdur. Biri dışında bu tip hiçbiri, başlık içerir.
Ben bu yüzden mümkün olduğunca spesifik bir cevap alabilirsiniz elimden geleni yapmak ve mümkün olduğunca bu soru gibi spesifik yapmaya çalışacağım. Ben kısa yapacağız.
Ben Ben Ward script ile başlıyorum Tumblr2Wordpress (geçerli GitHub). Burada bir başlık çıkarıcı gibi davranan kısmı:
# Try to extract a sane, single line blog title from input text, and
# (optionally) remove it from the entry body to avoid duplication.
function formatEntryTitle(&$text, $strip=true) {
$lines = explode("\n", $text);
$block_count = 0; # How far into the entry are we?
for($i=0; $l = $lines[$i]; $i++) {
if(empty($l)) {
# Ignoring emptry lines
continue;
}
elseif(preg_match('/^\s*(#+|<[hH][1-6]>).*$/', $l, $match)) {
# Matches a heading in Markdown or HTML
# Now we need to see if the title embeds any links. If it does,
# we want to strip out the link mark-up…
# If raw input:
if($markdown) {
# Run markdown:
$l = Markdown($l);
}
# Crudely check for <a>
$contains_link = !(false === stripos('<a', $l));
if( true === $strip
&& false === $contains_link) {
# If there has been no other content so far (allowing one block
# for quote attribution), and we're stripping titles out of the
# text to avoid duplication, do it:
array_splice($lines, $i, 1);
$text = implode("\n", $lines);
}
# In the final return, strip not-inline HTML tags.
return str_replace('\n', '', strip_tags($l));
#'<abbr><acronym><i><b><strong><em><code><kbd><samp><span><q>
# <cite><dfn><ins><del><mark><meter><rp><rt><ruby><sub><sup>
# <time><var>'
}
else {
$block_count++;
}
if($block_count > 2) {
# Too far into the post. Give up.
break;
}
}
return '';
}
Şimdi, burada ben (: Bilmiyorum ama tahmin edebiliyorum PHP okumak istemeyenler için) çalıştığını anlamak nasıl:
- Daha sonra bir Tumblr blog API okuyarak getirilen veri çıkışını biçimlendirmek için kullanacağınız
formatEntryTitle
adlı bir işlev oluşturun. - Sonra, arama kontrol etmek için satır sayısını saymak için bir kod var. Burada fikir, Ben'in fikri, bu başlık çıkarıcı belirli bir madde için yazılan içeriği aramak olacaktır. Arama hattına (veya blok) belli bir sayıdan sonra başarısız olursa sorgu şey sona ve dönecektir.
- Ama bir başlık oluşturmak için ne aramak için? Ben'in fikri, bazı durumlarda, çok verimli bir basittir: kod HTML başlığına (
h1
,h2
,h3
, vb) arar. Bupreg_match
komutunun rol. - Bir başlık bulmak yoksa bir bağlantı var, eğer bir) herhangi bir bağlantı onu şerit olacak; 2) diğer herhangi bir HTML etiketleri. Bu çıkarıcı Wordpress için başlık oluşturmak için inşa olduğunu unutmayın. Wordpress, herhangi bir yazının başlığında bağlantılar genellikle onun permalink.
- Içeriğinin dışında şerit yapar orada bir parçası da bulunuyor bulundu ve yazının içeriği, (belki bir estetik karar veya SEO ile ilgili bir şey başlık bulunuyor çoğaltmak değil bu yüzden başlık için kullanılan kelimeler: I bilmiyorum).
Tumblr API'sini okuyarak alınan verileri biçimlendirme Daha sonra, komut başlık oluşturmak için böyle bir argüman kullanın:
<title><?php echo htmlspecialchars(formatEntryTitle(&$post_content)) ?></title>
htmlspecialchars
HTML kişilere özel karakterleri dönüştürmek için tasarlanmış bir PHP string işlevi olduğunu. Sonra formatEntryTile
$post_content
biçimlendirmek için (Tumblr API yapısı ile ilgili olarak her yazı tipi için ayrı ayrı tanımlanır) faydalanmak, bunun içeriğinden bir başlık ayıklamak için Herhangi bir mesaj yazın.
Şimdiye kadar iyi. Iki şey hariç: 1) Bu başlık çıkarıcı EĞER çalışacak ve blogunuza HTML başlıkları bir sistematik kullanımını yapılmış sadece IF. Aksi takdirde, çıkarıcı herhangi bir h1
veya h2
veya h3
vb bulamazsınız ve hiçbir şey dönecektir. Ihracat işlemi yapıldıktan sonra temelde, yazınızın hiçbiri unvanını alacak. 2) benim blog başlıklarını kullanabilirsiniz vermedi. Ama nasıl çalıştığını görmek için başlıkları ile bir test blog kurmak. Ben herhangi bir başlık çıkarmak mümkün değildi. Belki de, ben yazının gövdesinde başlıklarını kullandı yolu benim. Bilmiyorum. Bu benim için önemli değil: Ben kadar customize yerine bunu istiyorum, (ben onun kırık bile emin değilim) fix Ben'in komut istemiyorum.
(Yığın taşması devreye giriyor bu.)
Bu basit olmalıdır. Dediğim gibi, ben PHP hakkında çok şey bilmiyorum, ama ben yarım orada zaten. Benim fikrim şudur: çıkarıcı TÜM sonrası içeriği aramak ... ve onu kesecek olabilir. İşte bu. Sadece yazının ilk birkaç kelime olsun, ve bir başlık olarak kullanabilirsiniz. Ben herkes için mükemmel bir çözüm değil biliyorum (başlıkları her zaman içerik alakalı olmayabilir ve kısmen yazının içeriğini yinelenen olacak) fakat 1) En azından HTML başlıkları yararlanmak istemeyenler için çalışacak; Yazımın her ilk birkaç kelime içeriği atıf olduğu için 2) Benim durumumda, bu harika: yaratıcısının adı vb fotoğraf veya kitap, yıl, adı
Ben Cik İnternet tarafından bu küçük PHP kodu bulundu. Bir simple truncating function bulunuyor. Bu birçok şekilde özelleştirilebilir. Ayrıca: çalışır. İşte ben başlangıçta kullanmaya çalıştı nasıl.
Ben işlevi formatEntryTitle
adını tuttu ama içeriğinin boşaltılması ve CHIRP en kodla değiştirin:
function formatEntryTitle($string, $limit, $break=".", $pad="...")
{
// return with no change if string is shorter than $limit
if(strlen($string) <= $limit) return $string;
// is $break present between $limit and the end of the string?
if(false !== ($breakpoint = strpos($string, $break, $limit))) {
if($breakpoint < strlen($string) - 1) {
$string = substr($string, 0, $breakpoint) . $pad;
}
}
return $string;
}
$title = formatEntryTitle($post_content, 40, " ");
(burada "40" Ben yazılan içerik kesiliyor ve boş alanı istediğiniz karakter sayısıdır: Sonra her sonrası tipi için, ben ilk bir dize $title
şöyle tanımlamak düz İngilizce kesiliyor sürecini sonlandırmak için kriterler: başlık kendisi) de-birinci-boş-uzay-sonrası-40-karakterleri-kesecek ve daha sonra çıkışa şu argümanı kullanın: <title><?php echo htmlspecialchars($title) ?></title>
Ve çalışır. Gerçekten yok.
Tek bir nokta hariç. And that's where I need some help: Benim başlıkları ... HTML etiketleri dolu. Ben bu yüzden bir ova, açık, sadece İngilizce başlık alabilirsiniz herhangi bir HTML etiketi kesilmiş kısmını temizlemeniz gerekir.
Ben'in kodu (onun başlık çıkarıcı başlık HTML etiketlerini kaldırır) faydalanmak için denedim ama ben yapmak için yetenekli değilim ötesinde ne var. Ben çıkarıcı hiyerarşik yapısına ilişkin bir sorun olduğunu düşünüyorum: Ben nerede şerit işlevini koymak bilmiyorum.
Ben uzun bir yazı var biliyorum, ama umarım birisi bir flaş çözüm göreceksiniz.