تغییر در مقدار فیلد از طریق ویوو

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
mehotkhan's picture

سلام ،دوستان من یه مشکل برخوردم
توی بخشی از سایتم یه ویوو ساختم که مقدار یه محتوا رو به شرطی که تیک "تیتر 1" زده باشه نشون میده ، و فقط یه آیتم رو نشون میده
مشکل من اینجاست که می خوام اون محتوایی که که دیگه توی این ویوو نشون داده نمیشه رو اتوماتیک تیک "تیتر 1 " غیر فعال بشه
چطوری میتونم این کار رو انجام بدم ؟
مرسی

Comments

Views Prebuild Hook

pcfeeler@gmail.com's picture

Your prefered way (on your view callbacks)

<?php
function yourmodule_views_prebuild ($view){
 
//dsm($view);
 
if ($view->name == "your_view_name"){
   
$lastNid = $view->result[0]->nid;// if view has only one result
   
setToZero = db_update('field_data_yourfieldname');
   
setToZero->fields(array('yourfieldname_value' => 0));
   
setToZero->condition("field_data_yourfieldname",0,"<>");
   
setToZero->condition("entity_id",$lastNid,"<>");
   
setToZero->execute();
  }
  return
$view;
}
?>

Another way on node save (more performant):
<?php
function yourmodule_node_presave($node){
$isZero = $node->yourfieldname['und'][0]['value'];
$nodeID = $node->nid;
if (
$isZero != '0'){
   
setToZero = db_update('field_data_yourfieldname');
   
setToZero->fields(array('yourfieldname_value' => 0));
   
setToZero->condition("field_data_yourfieldname",0,"<>");
   
setToZero->condition("entity_id",$nodeID,"<>");
   
setToZero->execute();
}
}
?>

مرسی ، این فانشن رو کجا باید

mehotkhan's picture

مرسی ، این فانشن رو کجا باید قرار بدم ؟
خیلی وارد نیستم به مباحث ویوو

yourmodule

pcfeeler@gmail.com's picture

باید یه ماژول درست کنید به اسم
yourmodule
یا هر اسم دیگری
مقدار
your_view_name
رو به اسم ماشینی ویوتون تغییر بدین
مقدار
yourfieldname
رو به اسم ماشینی فیلدتون تغییر بدین

دوستان کسی یه راهنمایی کنید

mehotkhan's picture

دوستان کسی یه راهنمایی کنید چطوری این کد رو قرار بدم توی سایت
سپاس فراوان

bayad ye module custom

Exlord's picture

bayad ye module custom besazin va in function ro tuye un garar bedin

من الان یه ماژول ساختم ، کد

mehotkhan's picture

من الان یه ماژول ساختم ، کد ها رو هم قرار دادم ، ولی کد ها خطا میگیره ، کلا با فعال کردنش سایت از کار می افته ،
محتوای فایل FirstTitle.module

<?php

function FirstTitle_views_prebuild ($view){
  if (
$view->name == "first_title"){
   
$lastNid = $view->result[0]->nid;// if view has only one result
   
setToZero = db_update('field_data_field_first_title');
   
setToZero->fields(array('field_first_title_value' => 0));
   
setToZero->condition("field_data_yfield_first_title",0,"<>");
   
setToZero->condition("entity_id",$lastNid,"<>");
   
setToZero->execute();
  }
  return
$view;
}

?>

محتوای فایل FirstTitle.info

name = "First Title"
description = "create first title section dynamicly"
core=7.x
package = "Other"
files[] = FirstTitle.module

version = "7.x-1.0"
core = "7.x"

کجای کارم مشکل داره ؟

<?phpsetToZero->condition("fi

pcfeeler@gmail.com's picture

<?php
setToZero
->condition("field_data_yfield_first_title",0,"<>");
?>

yfield => field
<?php
  setToZero
->condition("field_data_field_first_title",0,"<>");
?>

کد زیر رو داخل فایل
index.php
دروپال قرار بدید تا ارورها نمایش داده بشن
https://drupal.org/node/1056468
<?php
  error_reporting
(E_ALL);
 
ini_set('display_errors', TRUE);
 
ini_set('display_startup_errors', TRUE);
?>

سپاس فراوان بابت اینکه همراه

mehotkhan's picture

سپاس فراوان بابت اینکه همراه هستید
کاری که گفتید رو انجام دادم ولی کلا توی ادیتور هم سینتاکس ارور میده ، توی خطاهای دروپال هم همینطور
تصویر زیر رو ببینید :
Only local images are allowed.

ارور زیر هم توی ایندکس میگره ، همون کدی که گفتید رو گزاشتم

Parse error: syntax error, unexpected '=' in public_html/sites/all/modules/FirstTitle/FirstTitle.module on line 7

توی نت هم سرچ کردم ، چیزی نتونستم پیدا کنم که مشکل رو رفع کنم
مرسی از راهنماییتون

lol shoma chand vagte php kar

Exlord's picture

lol shoma chand vagte php kar mikonid ?
tu php variable ha ba $ shuru mishan :D
setToZero --> $setToZero

آقا من همه این کارها رو کردم

mehotkhan's picture

آقا من همه این کارها رو کردم ولی با جواب نداد !
با روش دوم هم رفتم ، ولی موقع ذخیره محتوا که تیک تیتر 1 زده باشه ، اروز میده :
وب سایت با یک خطای غیر منتظره مواجه شد. لطفا بعدا دوباره تلاش کنید.
این کدها رو گزاشتم توی ماژول

<?php
function FirstTitle_node_presave($node){
$isZero = $node->field_first_title['und'][0]['value'];
$nodeID = $node->nid;
if (
$isZero != '0'){
   
$setToZero = db_update('field_data_field_first_title');
   
$setToZero->fields(array('field_first_title_value' => 0));
   
$setToZero->condition("field_data_field_first_title",0,"<>");
   
$setToZero->condition("entity_id",$nodeID,"<>");
   
$setToZero->execute();
}
}
?>

چرا جواب نمیده ؟ :(
pcfeeler@gmail.com's picture

از لحاظ ساینتکسی به جز موردی که دوستمون اشاره کردن درباره دالر ساین به نظر نمیاد مشکل دیگه ای باشه
دقت کنید که نام جدول تو دیتابیس دقیقا همین نامی که توی ماژول هست باشه با پی اچ مای ادمین میتونید چک کنید.

لطفا این کد را تست کنید.

hejazee's picture

لطفا این کد را تست کنید. البته ظاهرا مشکل جزیی وجود دارد و این که هر بار نود را ذخیره می کنید باید کش دروپال را پاک کنید. شاید راه حلی برای آن پیدا شود.

<?php
/**
* Implements hook_node_presave().
*/
function titr1_node_presave($node) { 
 
//your boolean field name
 
$field_name = 'field_titr_1';
 
 
//on value
 
$on_value = 1;
 
 
//off value
 
$off_value = 0;
 
  if (isset(
$node->$field_name)) {
   
$field = $node->$field_name;
   
    if (isset(
$field['und'][0]['value'])) {
     
$field_value = $field['und'][0]['value'];
           
      if (
$field_value == $on_value) {
               
       
$table_name = "field_data_{$field_name}";
       
$table_field_name = "{$field_name}_value";
       
       
$transaction = db_transaction();
        try {
         
$q = db_update($table_name)
            ->
fields(array(
             
$table_field_name => $off_value,
            ))
            ->
condition($table_field_name, $on_value)
            ->
condition('entity_id', $node->nid, "<>");
           
           
$q->execute();

           
db_ignore_slave();
        }
        catch (\
Exception $e) {
         
$transaction->rollback();
         
watchdog_exception('Titr 1', $e, NULL, WATCHDOG_ERROR);
         
drupal_set_message('error', 'error');
          return
FALSE;
        }
      }
    }
  }
}
?>

Drupal Persian

Group categories

دسته بندی اصلی

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: