RBN Core - Framework v0.9.7 76 belge

İletişim bilgisi ve telefon yardımcıları

Kaynak: Core/Support/Bridges/Helpers/Library/FormatHelper.php · Core/Support/Bridges/Helpers/Global/project_helpers.php
Ölçüt: docs/google-arama/json-ld-hedef-semalari.md (telefon ülke kodlu, görünür metinle birebir), docs/yasal/gizlilik-politikasi-ve-iletisim-sayfalari.md.

1. Telefon: tek yardımcı, üç çıktı

Telefon DB'de ham rakam olarak durur (contact-phone, contact-landline). Hiçbir çıktı ham numarayı basmaz; görüntü, tel: bağlantısı, JSON-LD ve WhatsApp bağlantısı şu üç yardımcıdan gelir (görünümde global fonksiyon, kodda FormatHelper statik yöntemi):

Global FormatHelper Çıktı (05335675060 için) Nerede kullanılır
format_phone($n) formatPhone() 0 533 567 50 60 Ekranda görünen metin (footer, iletişim, yasal sayfa)
phone_e164($n) phoneE164() +905335675060 tel: bağlantısı, JSON-LD telephone
whatsapp_url($n) whatsappUrl() https://wa.me/905335675060 WhatsApp düğmesi. WhatsApp'ın ayrı numarası/ayarı yoktur: bağlantı ana telefondan (contact-phone) üretilir

Kabul edilen Türkiye girdileri: 02423225060, 2423225060, 902423225060, +90 242 322 50 60, 0090 242 322 50 60. Sabit hat ve cep aynı biçimdir (0 242 322 50 60). Türkiye numarası olmayan değer: format_phone olduğu gibi (kırpılmış) döner, phone_e164 yalnız + ile başlayan 8-15 haneli uluslararası numarayı kabul eder, aksi null; whatsapp_url aynı kuralla null döner. Ülke kodu tahmin edilmez; boş girdi boş çıktı verir.

<a href="tel:{{ phone_e164($phone) }}">{{ format_phone($phone) }}</a>
<a href="{{ whatsapp_url($phone) }}">WhatsApp</a>

İstemci tarafındaki giriş maskesi (rbnFormatPhone, data-format="phone", type="tel") aynı biçimi (0 XXX XXX XX XX) yazar; tek görüntü biçimi vardır.

2. İletişim bilgisi tek kaynak: contact_info()

Footer, iletişim sayfası, ödeme ve landing görünümleri ile JSON-LD aynı diziyi okur (ContactService::info(), service('contact'); ayarlar company-*, contact-*, social). Ziyaretçinin okuduğu metin ile yapısal veri bu yüzden ayrışamaz. Boş/eksik ayar boş değerdir; ne basılacağına (harita, form, saat bloğu, kart düzeni) sayfa görünümü karar verir. İletişim sayfasının TASARIMI projenin işidir; framework yalnız veriyi ve şemayı verir.

Anahtar Kaynak ayar Değer
legal_name company-legal-name unvan
name company-name marka / görünen ad
address, locality, region, postal_code contact-adress, contact-locality, contact-region, contact-postal-code metin
phone, phone_e164 contact-phone 0 533 567 50 60, +905335675060 (null: geçersiz)
landline, landline_e164 contact-landline 0 242 322 50 60, +902423225060
whatsapp, whatsapp_url contact-phone ana telefon; https://wa.me/905335675060
email contact-email metin
website ayar DEĞİL sitenin kendi adresi (url())
tax_office company-tax-office metin
hours, hours_schedule, open_status contact-hours (haftalık program) anahtarlar yalnız saat varsa vardır. hours programdan üretilen görünen metin, hours_schedule program, open_status açık/kapalı durumu ve kalan süre: Calisma-Saatleri
map_location company-map-location enlem,boylam
socials social grubu base.project getSocialLinks()['socialLinks'] çıktısı, tam platform kayıtlarıyla (key, title, url, color, bi_icon, fa_icon, ri_icon; kaynak social_media_platforms.json). ContactService kendi sosyal listesini ya da etiketini TUTMAZ
owner_name, trade_name, tax_number, mersis_number, trade_registry_number, kep_address company-owner-name (gerçek kişinin sitesinde sahip adı), company-trade-name, company-tax-number, company-mersis-number, company-trade-registry-number, company-kep-address anahtar yalnız doluysa vardır (şahıs firmasında yoktur)
establishment_year, experience_years company-establishment-year kuruluş yılı; experience_years = bu yıl − kuruluş yılı (hesaplanır). Yalnız doluysa vardır
service_areas company-service-areas hizmet bölgeleri listesi (ayarda her satıra bir bölge). Yalnız doluysa vardır
google_maps_url, google_review_url company-google-maps-url, company-google-review-url Google Haritalar / yorum yazma bağlantısı. Yalnız doluysa vardır
rating_score, rating_count company-rating-score, company-rating-count Google puanı ve yorum sayısı; yalnız Google senkronu yazar (bkz. §3). Yoksa anahtar yoktur: sabit/yedek puan YOKTUR. Görünürde gösterilebilir; JSON-LD'ye YAZILMAZ (self-serving aggregateRating politika riski)
$c = contact_info();
// <a href="tel:{{ $c['phone_e164'] }}">{{ $c['phone'] }}</a>
// @if(isset($c['hours'])) ... @endif
// @if(isset($c['tax_number'])) ... @endif

Görünüme giden contact (payload sözleşmesi)

Frontend denetleyicisi (FrontendBaseController::afterBoot), FrontendProvider ve SeoResolver görünüme $contact olarak contact_info() dizisinin kendisini verir: tablodaki anahtarlar, aynı adlarla, hazır/biçimli değerlerle. Ham ayar anahtarı (contact-phone, contact-adress…) görünüme gitmez; telefon biçimlendirme yalnız ContactService::info() içinde (FormatHelper) yapılır. Görünüm hazır değeri basar:

// <a href="tel:{{ $contact['phone_e164'] }}">{{ $contact['phone'] }}</a>
// @if(!empty($contact['whatsapp_url'])) <a href="{{ $contact['whatsapp_url'] }}">WhatsApp</a> @endif
// {{ $contact['legal_name'] }} · {{ $contact['address'] }}

Görünümde format_phone() / phone_e164() / whatsapp_url() çağrısı, ?? '#' yedeği ya da $contact['contact-phone'] okuması olmaz. Telefon yoksa phone boş metin, phone_e164 / whatsapp_url null olur: bağlantıyı basan blok @if(!empty(...)) içinde durur. $company ve $social değişkenleri ham ayar grubu olarak kalır (şirket adı/logosu, sosyal ayarlar); iletişim ve kimlik verisi için tek yol $contact'tır. Kapı: G-iletisim-10, -10b.

ContactPage JSON-LD

Sayfa denetleyicisi ->schema('contact', ['name' => 'İletişim']) der; çıktı ContactPage + BreadcrumbList. ContactPage.mainEntity organizasyon düğümünü (@id) gösterir; organizasyon düğümü (SchemaResolver::company()) telefonu (phone_e164), e-postayı, adresi (+ ilçe, il, posta kodu), koordinatı, sosyal bağlantıları ve legalName'i contact_info()'dan alır. Görünümde de aynı dizi basıldığından telefon ve adres görünür metinle birebir aynıdır (docs json-ld-hedef-semalari.md madde 3). Kapı: G-iletisim-05.

3. Google işletme profili senkronu (google:sync)

Çalışma saati, koordinat ve Google puanı projeye özel bir kod gerektirmez: framework haftalık bir zamanlanmış görevle Google'dan okur ve proje DB ayarlarına yazar; sayfalar yalnız DB'yi okur. Sayfa isteğinde Google'a gidilmez; Google yanıt vermezse DB'deki son değer durur (önbellek, sabit yedek değer, "canlı mı" işareti yoktur).

Katılım şartı Projenin z_settings_api tablosunda GOOGLE_API_KEY dolu ve şirket ayarı company-google-place-id (işletme kimliği, gizli değil, panelden girilir) dolu. İkisinden biri yoksa görev o proje için hiçbir şey yapmaz, hata da vermez (marka siteleri ve işletme olmayan siteler böyle dışarıda kalır).
Google'ın yazdığı alanlar contact-hours (Google regularOpeningHours.periods listesi, Calisma-Saatleri haftalık programına çevrilerek yazılır; görünen metin programdan üretilir), company-map-location (enlem,boylam), company-rating-score, company-rating-count. Aynı alan elle de girilmişse Google bağlı projede senkron yazar (tek yazan).
Google'ın YAZMADIĞI Adres (yasal adres elle girilir, contact-adress), telefon. Google'ın yanıtında olmayan alan yazılmaz (puan yoksa puan satırı eklenmez).
Zamanlama Master cron_jobs tablosunda tek satır: SystemTask, task_key=google_sync; varsayılan haftalık (Pazartesi 04:00), params.days / params.hours ile ayarlanır. Görev tüm aktif projeleri tek çalışmada dolaşır (ana proje bağlamından).
Elle tetikleme php rbn google:sync --project=<anahtar> [--apply] — --apply yoksa Google okunur, plan basılır, hiçbir şey yazılmaz.
Referer Anahtarın HTTP referer kısıtı için isteğe projenin alan adı (https://<alan-adı>/) eklenir.

API anahtarı ApiKeysRegistry::MAP['google']['api_key'] (GOOGLE_API_KEY) üzerinden çözülür; settings_api'ye başka ad eklenmez. Kod: GoogleService::syncBusinessProfile() (tek yazıcı), GoogleSyncJob, GoogleHandlers.

4. Ayar tablosunda boş satır yok

Ayar tablosuna (z_settings) yalnız kullanılan, DOLU değerli satır yazılır. rbn legal:install ve diğer kurulum yolları (setupAdsense) şablondan boş değerli satır eklemez; rbn settings:set boş değeri reddeder (ayarı kaldırmanın yolu settings:unset). Panel tanımı olan alanlar SettingsConfig içinde durur; satır, değer girilince oluşur. Google'a ait ayarlar (company-google-place-id, company-google-maps-url, company-google-review-url, company-rating-*, company-map-location, contact-hours) Google'sız sitede (marka sitesi) satır olarak bulunmaz. Yasal sayfadaki şirket satırları (dolu olan yazılır, boş olanın etiketi de yazılmaz; satışlı sitede unvan/adres/telefon/e-posta zorunlu): Yasal-Sayfa-Motoru §2. Kapı: g_ayar_bos_satir.php (G-ayar-01..06).

5. Kapılar

E:\AgentSpace\.agentspace\araclar\fw-regresyon\birim\g_iletisim_bilgisi.php: G-iletisim-01 telefon yardımcıları · -02 ham numara basan/ikinci biçimlendirme yapan kod yok · -03 WhatsApp ayarı yok · -04 contact_info() sözleşmesi · -05 ContactPage = görünen metin · -06 şablon satır biçimi + boş satır kuralı · -07 satışlı sitede zorunlu alanlar · -08 legal:install ayar satırı eklemez · -09 pilot yasal sayfalar · -10 görünüme giden contact yalnız contact_info() kaynağından, ham ayar anahtarı yok. Her biri -neg örnekle kırmızıya döner.
g_google_senkron.php: G-google-01 anahtar/yer kimliği yoksa senkron atlanır (-01b Places çağrısından önce) · -02 saat: Google periods → program → metin (-02b temsil edilemeyen periyot = bos) · -03 yazılan alanlar yalnız saat/konum/puan, adres asla · -04 sayfa isteğinde Google çağrısı yok (-04b önbellek yolu yok) · -05 sabit puan/rating_is_live yok · -06 projede genel servis dosyası ve referansı yok · -07 hizmet bölgeleri kodda sabit değil · -08 marka sitesinde contact-hours ve saat satırı yok · -09 işletme sitesinde saat/puan DB'den · -10 ContactService'te ikinci sosyal liste/okuma yok, socials = getSocialLinks() kayıtları.
Çalışma saatleri kapıları (g_calisma_saati.php, G-saat-01..17): Calisma-Saatleri §8.